<!DOCTYPE html>
<html lang="" xml:lang="">
<head>

  <meta charset="utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <title>第 6 章 数据探索性分析 | 生态统计学原理</title>
  <meta name="description" content="这是生态学统计基础的课程文件" />
  <meta name="generator" content="bookdown 0.40 and GitBook 2.6.7" />

  <meta property="og:title" content="第 6 章 数据探索性分析 | 生态统计学原理" />
  <meta property="og:type" content="book" />
  
  <meta property="og:description" content="这是生态学统计基础的课程文件" />
  <meta name="github-repo" content="rstudio/bookdown-demo" />

  <meta name="twitter:card" content="summary" />
  <meta name="twitter:title" content="第 6 章 数据探索性分析 | 生态统计学原理" />
  
  <meta name="twitter:description" content="这是生态学统计基础的课程文件" />
  

<meta name="author" content="沈国春、李勤，华东师范大学生态与环境科学学院" />



  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <meta name="apple-mobile-web-app-capable" content="yes" />
  <meta name="apple-mobile-web-app-status-bar-style" content="black" />
  
  
<link rel="prev" href="数理统计基础.html"/>
<link rel="next" href="实验设计.html"/>
<script src="libs/jquery-3.6.0/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@6.4.6/dist/fuse.min.js"></script>
<link href="libs/gitbook-2.6.7/css/style.css" rel="stylesheet" />
<link href="libs/gitbook-2.6.7/css/plugin-table.css" rel="stylesheet" />
<link href="libs/gitbook-2.6.7/css/plugin-bookdown.css" rel="stylesheet" />
<link href="libs/gitbook-2.6.7/css/plugin-highlight.css" rel="stylesheet" />
<link href="libs/gitbook-2.6.7/css/plugin-search.css" rel="stylesheet" />
<link href="libs/gitbook-2.6.7/css/plugin-fontsettings.css" rel="stylesheet" />
<link href="libs/gitbook-2.6.7/css/plugin-clipboard.css" rel="stylesheet" />








<link href="libs/anchor-sections-1.1.0/anchor-sections.css" rel="stylesheet" />
<link href="libs/anchor-sections-1.1.0/anchor-sections-hash.css" rel="stylesheet" />
<script src="libs/anchor-sections-1.1.0/anchor-sections.js"></script>


<style type="text/css">
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
  { counter-reset: source-line 0; }
pre.numberSource code > span
  { position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
  { content: counter(source-line);
    position: relative; left: -1em; text-align: right; vertical-align: baseline;
    border: none; display: inline-block;
    -webkit-touch-callout: none; -webkit-user-select: none;
    -khtml-user-select: none; -moz-user-select: none;
    -ms-user-select: none; user-select: none;
    padding: 0 4px; width: 4em;
    color: #aaaaaa;
  }
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa;  padding-left: 4px; }
div.sourceCode
  {   }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span.al { color: #ff0000; font-weight: bold; } /* Alert */
code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
code span.at { color: #7d9029; } /* Attribute */
code span.bn { color: #40a070; } /* BaseN */
code span.bu { color: #008000; } /* BuiltIn */
code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
code span.ch { color: #4070a0; } /* Char */
code span.cn { color: #880000; } /* Constant */
code span.co { color: #60a0b0; font-style: italic; } /* Comment */
code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
code span.do { color: #ba2121; font-style: italic; } /* Documentation */
code span.dt { color: #902000; } /* DataType */
code span.dv { color: #40a070; } /* DecVal */
code span.er { color: #ff0000; font-weight: bold; } /* Error */
code span.ex { } /* Extension */
code span.fl { color: #40a070; } /* Float */
code span.fu { color: #06287e; } /* Function */
code span.im { color: #008000; font-weight: bold; } /* Import */
code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
code span.kw { color: #007020; font-weight: bold; } /* Keyword */
code span.op { color: #666666; } /* Operator */
code span.ot { color: #007020; } /* Other */
code span.pp { color: #bc7a00; } /* Preprocessor */
code span.sc { color: #4070a0; } /* SpecialChar */
code span.ss { color: #bb6688; } /* SpecialString */
code span.st { color: #4070a0; } /* String */
code span.va { color: #19177c; } /* Variable */
code span.vs { color: #4070a0; } /* VerbatimString */
code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
</style>

<style type="text/css">
  
  div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
</style>

<link rel="stylesheet" href="style.css" type="text/css" />
</head>

<body>



  <div class="book without-animation with-summary font-size-2 font-family-1" data-basepath=".">

    <div class="book-summary">
      <nav role="navigation">

<ul class="summary">
<li><a href="./">生态统计学原理</a></li>

<li class="divider"></li>
<li class="chapter" data-level="1" data-path="index.html"><a href="index.html"><i class="fa fa-check"></i><b>1</b> 前言</a>
<ul>
<li class="chapter" data-level="1.1" data-path="index.html"><a href="index.html#为什么要学生态统计"><i class="fa fa-check"></i><b>1.1</b> 为什么要学生态统计</a></li>
<li class="chapter" data-level="1.2" data-path="index.html"><a href="index.html#为什么要学r语言"><i class="fa fa-check"></i><b>1.2</b> 为什么要学R语言</a></li>
<li class="chapter" data-level="1.3" data-path="index.html"><a href="index.html#如何使用和修改本书"><i class="fa fa-check"></i><b>1.3</b> 如何使用和修改本书</a></li>
<li class="chapter" data-level="1.4" data-path="index.html"><a href="index.html#课程助教"><i class="fa fa-check"></i><b>1.4</b> 课程助教</a></li>
</ul></li>
<li class="chapter" data-level="2" data-path="如何开始.html"><a href="如何开始.html"><i class="fa fa-check"></i><b>2</b> 如何开始</a>
<ul>
<li class="chapter" data-level="2.1" data-path="如何开始.html"><a href="如何开始.html#计算机的一些基本原理"><i class="fa fa-check"></i><b>2.1</b> 计算机的一些基本原理</a></li>
<li class="chapter" data-level="2.2" data-path="如何开始.html"><a href="如何开始.html#安装r程序"><i class="fa fa-check"></i><b>2.2</b> 安装R程序</a></li>
<li class="chapter" data-level="2.3" data-path="如何开始.html"><a href="如何开始.html#运行r程序"><i class="fa fa-check"></i><b>2.3</b> 运行R程序</a></li>
<li class="chapter" data-level="2.4" data-path="如何开始.html"><a href="如何开始.html#停止r程序"><i class="fa fa-check"></i><b>2.4</b> 停止R程序</a></li>
<li class="chapter" data-level="2.5" data-path="如何开始.html"><a href="如何开始.html#安装rstudio"><i class="fa fa-check"></i><b>2.5</b> 安装Rstudio</a></li>
<li class="chapter" data-level="2.6" data-path="如何开始.html"><a href="如何开始.html#获取帮助"><i class="fa fa-check"></i><b>2.6</b> 获取帮助</a>
<ul>
<li class="chapter" data-level="2.6.1" data-path="如何开始.html"><a href="如何开始.html#本地帮助文档"><i class="fa fa-check"></i><b>2.6.1</b> 本地帮助文档</a></li>
<li class="chapter" data-level="2.6.2" data-path="如何开始.html"><a href="如何开始.html#在线帮助"><i class="fa fa-check"></i><b>2.6.2</b> 在线帮助</a></li>
<li class="chapter" data-level="2.6.3" data-path="如何开始.html"><a href="如何开始.html#直接询问ai"><i class="fa fa-check"></i><b>2.6.3</b> 直接询问AI</a></li>
</ul></li>
<li class="chapter" data-level="2.7" data-path="如何开始.html"><a href="如何开始.html#r软件包"><i class="fa fa-check"></i><b>2.7</b> R软件包</a>
<ul>
<li class="chapter" data-level="2.7.1" data-path="如何开始.html"><a href="如何开始.html#使用r软件包"><i class="fa fa-check"></i><b>2.7.1</b> 使用R软件包</a></li>
<li class="chapter" data-level="2.7.2" data-path="如何开始.html"><a href="如何开始.html#r软件包内容"><i class="fa fa-check"></i><b>2.7.2</b> R软件包内容</a></li>
<li class="chapter" data-level="2.7.3" data-path="如何开始.html"><a href="如何开始.html#安装r软件包"><i class="fa fa-check"></i><b>2.7.3</b> 安装R软件包</a></li>
</ul></li>
<li class="chapter" data-level="2.8" data-path="如何开始.html"><a href="如何开始.html#安装其他功能"><i class="fa fa-check"></i><b>2.8</b> 安装其他功能</a>
<ul>
<li class="chapter" data-level="2.8.1" data-path="如何开始.html"><a href="如何开始.html#版本控制软件"><i class="fa fa-check"></i><b>2.8.1</b> 版本控制软件</a></li>
<li class="chapter" data-level="2.8.2" data-path="如何开始.html"><a href="如何开始.html#编写r软件包的辅助工具"><i class="fa fa-check"></i><b>2.8.2</b> 编写R软件包的辅助工具</a></li>
</ul></li>
<li class="chapter" data-level="2.9" data-path="如何开始.html"><a href="如何开始.html#获取本书资料"><i class="fa fa-check"></i><b>2.9</b> 获取本书资料</a>
<ul>
<li class="chapter" data-level="2.9.1" data-path="如何开始.html"><a href="如何开始.html#仅查看本书资料"><i class="fa fa-check"></i><b>2.9.1</b> 仅查看本书资料</a></li>
<li class="chapter" data-level="2.9.2" data-path="如何开始.html"><a href="如何开始.html#查看和修改本书资料"><i class="fa fa-check"></i><b>2.9.2</b> 查看和修改本书资料</a></li>
</ul></li>
</ul></li>
<li class="chapter" data-level="3" data-path="r语言基础.html"><a href="r语言基础.html"><i class="fa fa-check"></i><b>3</b> R语言基础</a>
<ul>
<li class="chapter" data-level="3.1" data-path="r语言基础.html"><a href="r语言基础.html#重要的快捷键"><i class="fa fa-check"></i><b>3.1</b> 重要的快捷键</a></li>
<li class="chapter" data-level="3.2" data-path="r语言基础.html"><a href="r语言基础.html#基本数据类型"><i class="fa fa-check"></i><b>3.2</b> 基本数据类型</a>
<ul>
<li class="chapter" data-level="3.2.1" data-path="r语言基础.html"><a href="r语言基础.html#字符"><i class="fa fa-check"></i><b>3.2.1</b> 字符</a></li>
<li class="chapter" data-level="3.2.2" data-path="r语言基础.html"><a href="r语言基础.html#数字"><i class="fa fa-check"></i><b>3.2.2</b> 数字</a></li>
<li class="chapter" data-level="3.2.3" data-path="r语言基础.html"><a href="r语言基础.html#逻辑值"><i class="fa fa-check"></i><b>3.2.3</b> 逻辑值</a></li>
<li class="chapter" data-level="3.2.4" data-path="r语言基础.html"><a href="r语言基础.html#类型转换"><i class="fa fa-check"></i><b>3.2.4</b> 类型转换</a></li>
</ul></li>
<li class="chapter" data-level="3.3" data-path="r语言基础.html"><a href="r语言基础.html#数据运算"><i class="fa fa-check"></i><b>3.3</b> 数据运算</a>
<ul>
<li class="chapter" data-level="3.3.1" data-path="r语言基础.html"><a href="r语言基础.html#数字运算"><i class="fa fa-check"></i><b>3.3.1</b> 数字运算</a></li>
<li class="chapter" data-level="3.3.2" data-path="r语言基础.html"><a href="r语言基础.html#逻辑和关系运算"><i class="fa fa-check"></i><b>3.3.2</b> 逻辑和关系运算</a></li>
<li class="chapter" data-level="3.3.3" data-path="r语言基础.html"><a href="r语言基础.html#字符运算"><i class="fa fa-check"></i><b>3.3.3</b> 字符运算</a></li>
</ul></li>
<li class="chapter" data-level="3.4" data-path="r语言基础.html"><a href="r语言基础.html#常见运算函数"><i class="fa fa-check"></i><b>3.4</b> 常见运算函数</a></li>
<li class="chapter" data-level="3.5" data-path="r语言基础.html"><a href="r语言基础.html#变量"><i class="fa fa-check"></i><b>3.5</b> 变量</a>
<ul>
<li class="chapter" data-level="3.5.1" data-path="r语言基础.html"><a href="r语言基础.html#变量构造"><i class="fa fa-check"></i><b>3.5.1</b> 变量构造</a></li>
<li class="chapter" data-level="3.5.2" data-path="r语言基础.html"><a href="r语言基础.html#赋值"><i class="fa fa-check"></i><b>3.5.2</b> 赋值</a></li>
</ul></li>
<li class="chapter" data-level="3.6" data-path="r语言基础.html"><a href="r语言基础.html#逻辑控制"><i class="fa fa-check"></i><b>3.6</b> 逻辑控制</a>
<ul>
<li class="chapter" data-level="3.6.1" data-path="r语言基础.html"><a href="r语言基础.html#条件"><i class="fa fa-check"></i><b>3.6.1</b> 条件</a></li>
<li class="chapter" data-level="3.6.2" data-path="r语言基础.html"><a href="r语言基础.html#循环"><i class="fa fa-check"></i><b>3.6.2</b> 循环</a></li>
</ul></li>
<li class="chapter" data-level="3.7" data-path="r语言基础.html"><a href="r语言基础.html#容器"><i class="fa fa-check"></i><b>3.7</b> 容器</a>
<ul>
<li class="chapter" data-level="3.7.1" data-path="r语言基础.html"><a href="r语言基础.html#向量"><i class="fa fa-check"></i><b>3.7.1</b> 向量</a></li>
<li class="chapter" data-level="3.7.2" data-path="r语言基础.html"><a href="r语言基础.html#矩阵"><i class="fa fa-check"></i><b>3.7.2</b> 矩阵</a></li>
<li class="chapter" data-level="3.7.3" data-path="r语言基础.html"><a href="r语言基础.html#数据框"><i class="fa fa-check"></i><b>3.7.3</b> 数据框</a></li>
<li class="chapter" data-level="3.7.4" data-path="r语言基础.html"><a href="r语言基础.html#列表"><i class="fa fa-check"></i><b>3.7.4</b> 列表</a></li>
</ul></li>
<li class="chapter" data-level="3.8" data-path="r语言基础.html"><a href="r语言基础.html#函数"><i class="fa fa-check"></i><b>3.8</b> 函数</a>
<ul>
<li class="chapter" data-level="3.8.1" data-path="r语言基础.html"><a href="r语言基础.html#函数的判别"><i class="fa fa-check"></i><b>3.8.1</b> 函数的判别</a></li>
<li class="chapter" data-level="3.8.2" data-path="r语言基础.html"><a href="r语言基础.html#函数的定义"><i class="fa fa-check"></i><b>3.8.2</b> 函数的定义</a></li>
</ul></li>
<li class="chapter" data-level="3.9" data-path="r语言基础.html"><a href="r语言基础.html#作业"><i class="fa fa-check"></i><b>3.9</b> 作业</a></li>
</ul></li>
<li class="chapter" data-level="4" data-path="常见生态数据及问题.html"><a href="常见生态数据及问题.html"><i class="fa fa-check"></i><b>4</b> 常见生态数据及问题</a></li>
<li class="chapter" data-level="5" data-path="数理统计基础.html"><a href="数理统计基础.html"><i class="fa fa-check"></i><b>5</b> 数理统计基础</a>
<ul>
<li class="chapter" data-level="5.0.1" data-path="数理统计基础.html"><a href="数理统计基础.html#协方差"><i class="fa fa-check"></i><b>5.0.1</b> 协方差</a></li>
<li class="chapter" data-level="5.0.2" data-path="数理统计基础.html"><a href="数理统计基础.html#偏相关系数"><i class="fa fa-check"></i><b>5.0.2</b> 偏相关系数</a></li>
</ul></li>
<li class="chapter" data-level="6" data-path="数据探索性分析.html"><a href="数据探索性分析.html"><i class="fa fa-check"></i><b>6</b> 数据探索性分析</a>
<ul>
<li class="chapter" data-level="6.1" data-path="数据探索性分析.html"><a href="数据探索性分析.html#初步探索分析"><i class="fa fa-check"></i><b>6.1</b> 初步探索分析</a>
<ul>
<li class="chapter" data-level="6.1.1" data-path="数据探索性分析.html"><a href="数据探索性分析.html#异常值和缺失值"><i class="fa fa-check"></i><b>6.1.1</b> 异常值和缺失值</a></li>
<li class="chapter" data-level="6.1.2" data-path="数据探索性分析.html"><a href="数据探索性分析.html#理解数据"><i class="fa fa-check"></i><b>6.1.2</b> 理解数据</a></li>
</ul></li>
<li class="chapter" data-level="6.2" data-path="数据探索性分析.html"><a href="数据探索性分析.html#排序"><i class="fa fa-check"></i><b>6.2</b> 排序</a>
<ul>
<li class="chapter" data-level="6.2.1" data-path="数据探索性分析.html"><a href="数据探索性分析.html#排序的原理"><i class="fa fa-check"></i><b>6.2.1</b> 排序的原理</a></li>
<li class="chapter" data-level="6.2.2" data-path="数据探索性分析.html"><a href="数据探索性分析.html#排序基本原理"><i class="fa fa-check"></i><b>6.2.2</b> 排序基本原理</a></li>
<li class="chapter" data-level="6.2.3" data-path="数据探索性分析.html"><a href="数据探索性分析.html#主成分分析"><i class="fa fa-check"></i><b>6.2.3</b> 主成分分析</a></li>
<li class="chapter" data-level="6.2.4" data-path="数据探索性分析.html"><a href="数据探索性分析.html#对应分析"><i class="fa fa-check"></i><b>6.2.4</b> 对应分析</a></li>
<li class="chapter" data-level="6.2.5" data-path="数据探索性分析.html"><a href="数据探索性分析.html#常用的几种排序分析"><i class="fa fa-check"></i><b>6.2.5</b> 常用的几种排序分析</a></li>
</ul></li>
<li class="chapter" data-level="6.3" data-path="数据探索性分析.html"><a href="数据探索性分析.html#聚类"><i class="fa fa-check"></i><b>6.3</b> 聚类</a>
<ul>
<li class="chapter" data-level="6.3.1" data-path="数据探索性分析.html"><a href="数据探索性分析.html#层次聚类"><i class="fa fa-check"></i><b>6.3.1</b> 层次聚类</a></li>
<li class="chapter" data-level="6.3.2" data-path="数据探索性分析.html"><a href="数据探索性分析.html#非层次聚类"><i class="fa fa-check"></i><b>6.3.2</b> 非层次聚类</a></li>
<li class="chapter" data-level="6.3.3" data-path="数据探索性分析.html"><a href="数据探索性分析.html#多元回归树"><i class="fa fa-check"></i><b>6.3.3</b> 多元回归树</a></li>
<li class="chapter" data-level="6.3.4" data-path="数据探索性分析.html"><a href="数据探索性分析.html#顺序聚类"><i class="fa fa-check"></i><b>6.3.4</b> 顺序聚类</a></li>
</ul></li>
<li class="chapter" data-level="6.4" data-path="数据探索性分析.html"><a href="数据探索性分析.html#作业-1"><i class="fa fa-check"></i><b>6.4</b> 作业</a></li>
</ul></li>
<li class="chapter" data-level="7" data-path="实验设计.html"><a href="实验设计.html"><i class="fa fa-check"></i><b>7</b> 实验设计</a></li>
<li class="chapter" data-level="8" data-path="经典统计检验.html"><a href="经典统计检验.html"><i class="fa fa-check"></i><b>8</b> 经典统计检验</a></li>
<li class="chapter" data-level="9" data-path="回归分析.html"><a href="回归分析.html"><i class="fa fa-check"></i><b>9</b> 回归分析</a>
<ul>
<li class="chapter" data-level="9.1" data-path="回归分析.html"><a href="回归分析.html#一元回归"><i class="fa fa-check"></i><b>9.1</b> 一元回归</a>
<ul>
<li class="chapter" data-level="9.1.1" data-path="回归分析.html"><a href="回归分析.html#一元线性模型"><i class="fa fa-check"></i><b>9.1.1</b> 一元线性模型</a></li>
<li class="chapter" data-level="9.1.2" data-path="回归分析.html"><a href="回归分析.html#类型变量"><i class="fa fa-check"></i><b>9.1.2</b> 类型变量</a></li>
<li class="chapter" data-level="9.1.3" data-path="回归分析.html"><a href="回归分析.html#多项式回归"><i class="fa fa-check"></i><b>9.1.3</b> 多项式回归</a></li>
</ul></li>
<li class="chapter" data-level="9.2" data-path="回归分析.html"><a href="回归分析.html#多元回归"><i class="fa fa-check"></i><b>9.2</b> 多元回归</a>
<ul>
<li class="chapter" data-level="9.2.1" data-path="回归分析.html"><a href="回归分析.html#变量筛选"><i class="fa fa-check"></i><b>9.2.1</b> 变量筛选</a></li>
<li class="chapter" data-level="9.2.2" data-path="回归分析.html"><a href="回归分析.html#因子之间的相对重要性"><i class="fa fa-check"></i><b>9.2.2</b> 因子之间的相对重要性</a></li>
<li class="chapter" data-level="9.2.3" data-path="回归分析.html"><a href="回归分析.html#模型诊断"><i class="fa fa-check"></i><b>9.2.3</b> 模型诊断</a></li>
<li class="chapter" data-level="9.2.4" data-path="回归分析.html"><a href="回归分析.html#包含类型变量的多元回归"><i class="fa fa-check"></i><b>9.2.4</b> 包含类型变量的多元回归</a></li>
</ul></li>
<li class="chapter" data-level="9.3" data-path="回归分析.html"><a href="回归分析.html#广义线性回归"><i class="fa fa-check"></i><b>9.3</b> 广义线性回归</a>
<ul>
<li class="chapter" data-level="9.3.1" data-path="回归分析.html"><a href="回归分析.html#目前的困境"><i class="fa fa-check"></i><b>9.3.1</b> 目前的困境</a></li>
<li class="chapter" data-level="9.3.2" data-path="回归分析.html"><a href="回归分析.html#理论扩展"><i class="fa fa-check"></i><b>9.3.2</b> 理论扩展</a></li>
<li class="chapter" data-level="9.3.3" data-path="回归分析.html"><a href="回归分析.html#binary数据例子"><i class="fa fa-check"></i><b>9.3.3</b> binary数据例子</a></li>
<li class="chapter" data-level="9.3.4" data-path="回归分析.html"><a href="回归分析.html#展示回归结果"><i class="fa fa-check"></i><b>9.3.4</b> 展示回归结果</a></li>
</ul></li>
<li class="chapter" data-level="9.4" data-path="回归分析.html"><a href="回归分析.html#混合效应模型"><i class="fa fa-check"></i><b>9.4</b> 混合效应模型</a></li>
<li class="chapter" data-level="9.5" data-path="回归分析.html"><a href="回归分析.html#结构方程"><i class="fa fa-check"></i><b>9.5</b> 结构方程</a></li>
<li class="chapter" data-level="9.6" data-path="回归分析.html"><a href="回归分析.html#作业-2"><i class="fa fa-check"></i><b>9.6</b> 作业</a></li>
</ul></li>
<li class="chapter" data-level="10" data-path="谱系分析.html"><a href="谱系分析.html"><i class="fa fa-check"></i><b>10</b> 谱系分析</a></li>
<li class="chapter" data-level="11" data-path="时间序列分析.html"><a href="时间序列分析.html"><i class="fa fa-check"></i><b>11</b> 时间序列分析</a></li>
<li class="chapter" data-level="12" data-path="空间分析.html"><a href="空间分析.html"><i class="fa fa-check"></i><b>12</b> 空间分析</a></li>
<li class="chapter" data-level="13" data-path="网络分析.html"><a href="网络分析.html"><i class="fa fa-check"></i><b>13</b> 网络分析</a>
<ul>
<li class="chapter" data-level="13.1" data-path="网络分析.html"><a href="网络分析.html#物种共现网络"><i class="fa fa-check"></i><b>13.1</b> 物种共现网络</a></li>
</ul></li>
<li class="chapter" data-level="14" data-path="宏分析.html"><a href="宏分析.html"><i class="fa fa-check"></i><b>14</b> 宏分析</a></li>
<li class="divider"></li>
<li><a href="https://faculty.ecnu.edu.cn/_s31/sgc/main.psp" target="blank">个人主页</a></li>

</ul>

      </nav>
    </div>

    <div class="book-body">
      <div class="body-inner">
        <div class="book-header" role="navigation">
          <h1>
            <i class="fa fa-circle-o-notch fa-spin"></i><a href="./">生态统计学原理</a>
          </h1>
        </div>

        <div class="page-wrapper" tabindex="-1" role="main">
          <div class="page-inner">

            <section class="normal" id="section-">
<div id="数据探索性分析" class="section level1 hasAnchor" number="6">
<h1><span class="header-section-number">第 6 章</span> 数据探索性分析<a href="数据探索性分析.html#数据探索性分析" class="anchor-section" aria-label="Anchor link to header"></a></h1>
<p>数据探索性分析（Exploratory Data Analysis，EDA）是旨在从数据中发现模式、趋势和关系，以便更好地理解数据。这种分析方法通常在数据收集和分析的早期阶段进行，通过可视化和统计技术来揭示数据的基本特征和潜在规律。</p>
<p>进行数据探索性分析的原因主要有以下几点：</p>
<ul>
<li><p>识别异常值和缺失值：在数据集中，异常值和缺失值是常见的问题。EDA通过可视化工具和统计方法，能够帮助分析师快速识别这些值，并评估它们对分析结果的影响。这有助于确保数据的准确性和完整性，提高分析结果的可靠性。</p></li>
<li><p>理解数据：EDA有助于更好地理解数据集。通过探索数据的分布、中心趋势、离散程度以及变量之间的关系，可以形成对数据集的全面认识，为后续的数据处理和分析奠定基础。</p></li>
<li><p>发现模式和关系：EDA能够揭示数据中的隐藏模式和关联关系。这些模式和关系可能不容易通过简单的统计描述或模型预测发现，但对于理解数据的本质和制定有效的决策至关重要。</p></li>
</ul>
<p>数据探索性分析在数据分析过程中扮演着重要的角色。它不仅有助于我们更好地理解数据，还能发现数据中的潜在价值和洞察力，为决策和预测提供有力的支持。</p>
<div id="初步探索分析" class="section level2 hasAnchor" number="6.1">
<h2><span class="header-section-number">6.1</span> 初步探索分析<a href="数据探索性分析.html#初步探索分析" class="anchor-section" aria-label="Anchor link to header"></a></h2>
<div id="异常值和缺失值" class="section level3 hasAnchor" number="6.1.1">
<h3><span class="header-section-number">6.1.1</span> 异常值和缺失值<a href="数据探索性分析.html#异常值和缺失值" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>分析数据前，检查数据中的异常值和缺失值至关重要，原因主要有以下几点：</p>
<ol style="list-style-type: decimal">
<li><p><strong>数据质量</strong>：异常值和缺失值可能是数据收集或处理过程中的错误所导致的。识别并处理这些值有助于提高数据质量，确保分析结果的准确性和可靠性。</p></li>
<li><p><strong>影响分析结果</strong>：异常值可能会对数据集的统计特性（如均值、标准差等）产生显著影响，从而导致分析结果偏离实际情况。同样，缺失值如果未得到妥善处理，也可能引入偏差或降低分析的准确性。</p></li>
<li><p><strong>揭示潜在问题</strong>：异常值有时可能揭示了数据背后的潜在问题或异常现象，如设备故障、操作失误等。通过检查异常值，可以及时发现并处理这些问题，避免造成更大的损失。</p></li>
<li><p><strong>完整性考量</strong>：缺失值代表了数据的不完整性。在某些情况下，缺失值可能意味着某些重要信息未被记录或无法获取。了解缺失值的分布和模式有助于评估数据的完整性和可用性，以及是否需要采取进一步的数据收集措施。</p></li>
<li><p><strong>模型性能</strong>：在构建预测模型时，异常值和缺失值可能对模型的性能和稳定性产生负面影响。识别并处理这些值有助于提升模型的泛化能力，确保模型在实际应用中的有效性。</p></li>
</ol>
<p>在R语言中，你可以使用多种方法来寻找异常值或缺失值。以下是一些常见的方法：</p>
<div id="寻找缺失值" class="section level4 hasAnchor" number="6.1.1.1">
<h4><span class="header-section-number">6.1.1.1</span> 寻找缺失值<a href="数据探索性分析.html#寻找缺失值" class="anchor-section" aria-label="Anchor link to header"></a></h4>
<p>缺失值在R中通常用<code>NA</code>表示。你可以使用<code>is.na()</code>函数来检测缺失值。</p>
<div class="sourceCode" id="cb260"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb260-1"><a href="数据探索性分析.html#cb260-1" tabindex="-1"></a><span class="co"># 创建一个包含缺失值的数据向量</span></span>
<span id="cb260-2"><a href="数据探索性分析.html#cb260-2" tabindex="-1"></a>data <span class="ot">&lt;-</span> <span class="fu">c</span>(<span class="dv">1</span>, <span class="dv">2</span>, <span class="cn">NA</span>, <span class="dv">4</span>, <span class="dv">5</span>, <span class="cn">NA</span>, <span class="dv">7</span>)</span>
<span id="cb260-3"><a href="数据探索性分析.html#cb260-3" tabindex="-1"></a></span>
<span id="cb260-4"><a href="数据探索性分析.html#cb260-4" tabindex="-1"></a><span class="co"># 检测缺失值</span></span>
<span id="cb260-5"><a href="数据探索性分析.html#cb260-5" tabindex="-1"></a>missing_values <span class="ot">&lt;-</span> <span class="fu">is.na</span>(data)</span>
<span id="cb260-6"><a href="数据探索性分析.html#cb260-6" tabindex="-1"></a></span>
<span id="cb260-7"><a href="数据探索性分析.html#cb260-7" tabindex="-1"></a><span class="co"># 打印缺失值的位置</span></span>
<span id="cb260-8"><a href="数据探索性分析.html#cb260-8" tabindex="-1"></a><span class="fu">which</span>(missing_values)</span></code></pre></div>
<pre><code>## [1] 3 6</code></pre>
</div>
<div id="寻找异常值" class="section level4 hasAnchor" number="6.1.1.2">
<h4><span class="header-section-number">6.1.1.2</span> 寻找异常值<a href="数据探索性分析.html#寻找异常值" class="anchor-section" aria-label="Anchor link to header"></a></h4>
<p>异常值通常是指远离其他数据的值。你可以使用多种方法来检测它们，例如使用标准差、四分位数范围（IQR）或箱线图。</p>
<div id="使用标准差来检测异常值" class="section level5 hasAnchor" number="6.1.1.2.1">
<h5><span class="header-section-number">6.1.1.2.1</span> 使用标准差来检测异常值：<a href="数据探索性分析.html#使用标准差来检测异常值" class="anchor-section" aria-label="Anchor link to header"></a></h5>
<div class="sourceCode" id="cb262"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb262-1"><a href="数据探索性分析.html#cb262-1" tabindex="-1"></a><span class="co"># 创建一个数据向量</span></span>
<span id="cb262-2"><a href="数据探索性分析.html#cb262-2" tabindex="-1"></a>data <span class="ot">&lt;-</span> <span class="fu">c</span>(<span class="dv">1</span>, <span class="dv">2</span>, <span class="dv">3</span>, <span class="dv">4</span>, <span class="dv">5</span>, <span class="dv">100</span>)  <span class="co"># 假设100是异常值</span></span>
<span id="cb262-3"><a href="数据探索性分析.html#cb262-3" tabindex="-1"></a></span>
<span id="cb262-4"><a href="数据探索性分析.html#cb262-4" tabindex="-1"></a><span class="co"># 计算平均值和标准差</span></span>
<span id="cb262-5"><a href="数据探索性分析.html#cb262-5" tabindex="-1"></a>mean_data <span class="ot">&lt;-</span> <span class="fu">mean</span>(data, <span class="at">na.rm =</span> <span class="cn">TRUE</span>)</span>
<span id="cb262-6"><a href="数据探索性分析.html#cb262-6" tabindex="-1"></a>sd_data <span class="ot">&lt;-</span> <span class="fu">sd</span>(data, <span class="at">na.rm =</span> <span class="cn">TRUE</span>)</span>
<span id="cb262-7"><a href="数据探索性分析.html#cb262-7" tabindex="-1"></a></span>
<span id="cb262-8"><a href="数据探索性分析.html#cb262-8" tabindex="-1"></a><span class="co"># 定义异常值的阈值（例如，超过平均值2个标准差）</span></span>
<span id="cb262-9"><a href="数据探索性分析.html#cb262-9" tabindex="-1"></a>threshold <span class="ot">&lt;-</span> <span class="dv">2</span> <span class="sc">*</span> sd_data</span>
<span id="cb262-10"><a href="数据探索性分析.html#cb262-10" tabindex="-1"></a></span>
<span id="cb262-11"><a href="数据探索性分析.html#cb262-11" tabindex="-1"></a><span class="co"># 检测异常值</span></span>
<span id="cb262-12"><a href="数据探索性分析.html#cb262-12" tabindex="-1"></a>outliers <span class="ot">&lt;-</span> <span class="fu">abs</span>(data <span class="sc">-</span> mean_data) <span class="sc">&gt;</span> threshold</span>
<span id="cb262-13"><a href="数据探索性分析.html#cb262-13" tabindex="-1"></a></span>
<span id="cb262-14"><a href="数据探索性分析.html#cb262-14" tabindex="-1"></a><span class="co"># 打印异常值的位置</span></span>
<span id="cb262-15"><a href="数据探索性分析.html#cb262-15" tabindex="-1"></a><span class="fu">which</span>(outliers)</span></code></pre></div>
<pre><code>## [1] 6</code></pre>
</div>
<div id="使用四分位数范围iqr来检测异常值" class="section level5 hasAnchor" number="6.1.1.2.2">
<h5><span class="header-section-number">6.1.1.2.2</span> 使用四分位数范围（IQR）来检测异常值：<a href="数据探索性分析.html#使用四分位数范围iqr来检测异常值" class="anchor-section" aria-label="Anchor link to header"></a></h5>
<p>IQR是第三四分位数（Q3）和第一四分位数（Q1）之间的差。你可以使用IQR来定义异常值的范围。</p>
<div class="sourceCode" id="cb264"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb264-1"><a href="数据探索性分析.html#cb264-1" tabindex="-1"></a><span class="co"># 创建一个数据向量</span></span>
<span id="cb264-2"><a href="数据探索性分析.html#cb264-2" tabindex="-1"></a>data <span class="ot">&lt;-</span> <span class="fu">c</span>(<span class="dv">1</span>, <span class="dv">2</span>, <span class="dv">3</span>, <span class="dv">4</span>, <span class="dv">5</span>, <span class="dv">20</span>)  <span class="co"># 假设20是异常值</span></span>
<span id="cb264-3"><a href="数据探索性分析.html#cb264-3" tabindex="-1"></a></span>
<span id="cb264-4"><a href="数据探索性分析.html#cb264-4" tabindex="-1"></a><span class="co"># 计算四分位数</span></span>
<span id="cb264-5"><a href="数据探索性分析.html#cb264-5" tabindex="-1"></a>Q1 <span class="ot">&lt;-</span> <span class="fu">quantile</span>(data, <span class="fl">0.25</span>, <span class="at">na.rm =</span> <span class="cn">TRUE</span>)</span>
<span id="cb264-6"><a href="数据探索性分析.html#cb264-6" tabindex="-1"></a>Q3 <span class="ot">&lt;-</span> <span class="fu">quantile</span>(data, <span class="fl">0.75</span>, <span class="at">na.rm =</span> <span class="cn">TRUE</span>)</span>
<span id="cb264-7"><a href="数据探索性分析.html#cb264-7" tabindex="-1"></a>IQR <span class="ot">&lt;-</span> Q3 <span class="sc">-</span> Q1</span>
<span id="cb264-8"><a href="数据探索性分析.html#cb264-8" tabindex="-1"></a></span>
<span id="cb264-9"><a href="数据探索性分析.html#cb264-9" tabindex="-1"></a><span class="co"># 定义异常值的阈值（例如，小于Q1-1.5*IQR或大于Q3+1.5*IQR）</span></span>
<span id="cb264-10"><a href="数据探索性分析.html#cb264-10" tabindex="-1"></a>lower_threshold <span class="ot">&lt;-</span> Q1 <span class="sc">-</span> <span class="fl">1.5</span> <span class="sc">*</span> IQR</span>
<span id="cb264-11"><a href="数据探索性分析.html#cb264-11" tabindex="-1"></a>upper_threshold <span class="ot">&lt;-</span> Q3 <span class="sc">+</span> <span class="fl">1.5</span> <span class="sc">*</span> IQR</span>
<span id="cb264-12"><a href="数据探索性分析.html#cb264-12" tabindex="-1"></a></span>
<span id="cb264-13"><a href="数据探索性分析.html#cb264-13" tabindex="-1"></a><span class="co"># 检测异常值</span></span>
<span id="cb264-14"><a href="数据探索性分析.html#cb264-14" tabindex="-1"></a>outliers <span class="ot">&lt;-</span> data <span class="sc">&lt;</span> lower_threshold <span class="sc">|</span> data <span class="sc">&gt;</span> upper_threshold</span>
<span id="cb264-15"><a href="数据探索性分析.html#cb264-15" tabindex="-1"></a></span>
<span id="cb264-16"><a href="数据探索性分析.html#cb264-16" tabindex="-1"></a><span class="co"># 打印异常值的位置</span></span>
<span id="cb264-17"><a href="数据探索性分析.html#cb264-17" tabindex="-1"></a><span class="fu">which</span>(outliers)</span></code></pre></div>
<pre><code>## [1] 6</code></pre>
<p>或者直接使用箱形图来查看异常值</p>
<div class="sourceCode" id="cb266"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb266-1"><a href="数据探索性分析.html#cb266-1" tabindex="-1"></a><span class="fu">boxplot</span>(data)</span></code></pre></div>
<p><img src="_main_files/figure-html/unnamed-chunk-79-1.png" width="672" /></p>
</div>
</div>
</div>
<div id="理解数据" class="section level3 hasAnchor" number="6.1.2">
<h3><span class="header-section-number">6.1.2</span> 理解数据<a href="数据探索性分析.html#理解数据" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<div id="数据分布" class="section level4 hasAnchor" number="6.1.2.1">
<h4><span class="header-section-number">6.1.2.1</span> 数据分布<a href="数据探索性分析.html#数据分布" class="anchor-section" aria-label="Anchor link to header"></a></h4>
<p>数据分布是指数据在不同数值或类别上的频数或概率的分布情况。它描述了数据集中的数值如何分散在不同的取值范围内，反映了数据的整体形态和特征。它能帮助我们更好地理解数据的内在规律和结构。</p>
<p>不同的数据分布类型适用于不同的统计方法。了解数据分布有助于选择合适的统计方法进行数据分析和建模，对于数据分析、模型构建等后续都至关重要。</p>
<p>A common assumption in classical statistics is that your variable follows <strong>Normal distribution</strong>.</p>
<p><img src="_main_files/figure-html/unnamed-chunk-80-1.png" width="672" /></p>
<p>How to test whether your data follows <em>Normal distribution</em>?</p>
<p><img src="_main_files/figure-html/unnamed-chunk-81-1.png" width="672" /></p>
<p><strong>Shapiro-Wilk Normality Test</strong></p>
<div class="sourceCode" id="cb267"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb267-1"><a href="数据探索性分析.html#cb267-1" tabindex="-1"></a><span class="fu">shapiro.test</span>(x)</span></code></pre></div>
<pre><code>## 
##  Shapiro-Wilk normality test
## 
## data:  x
## W = 0.99886, p-value = 0.7941</code></pre>
<div class="sourceCode" id="cb269"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb269-1"><a href="数据探索性分析.html#cb269-1" tabindex="-1"></a><span class="fu">shapiro.test</span>(y)</span></code></pre></div>
<pre><code>## 
##  Shapiro-Wilk normality test
## 
## data:  y
## W = 0.80994, p-value &lt; 2.2e-16</code></pre>
<p>How to transfer a varalble into a <em>normal distribution</em>?</p>
<p>common transformation:</p>
<ul>
<li>square root</li>
<li>log</li>
<li><strong>Box-Cox transformation</strong></li>
</ul>
<p>Box-Cox转换是一种广义幂变换方法，常用于统计建模中，特别是当连续变量不满足正态分布时。这种转换的主要目的是改善数据的正态性、对称性和方差相等性，从而使其更适用于后续的统计分析。</p>
<p>Box-Cox转换在回归分析中尤为有用，特别是当响应变量不满足正态分布的假设时。通过该转换，可以使数据更符合线性模型的假设条件，从而提高模型的拟合效果和预测准确性。此外，它还可以用于解决异方差问题以及进行数据归一化等任务。</p>
<ol style="list-style-type: decimal">
<li><strong>变换形式</strong>：
<ul>
<li>Box-Cox转换的一般形式为：<span class="math inline">\(y(λ) = (y^λ - 1) / λ\)</span>，当λ不等于0时。</li>
<li>当λ等于0时，该变换采用对数形式，即<span class="math inline">\(y(λ) = ln(y)\)</span>。</li>
<li>其中，λ是一个待定的变换参数，需要通过数据来确定其最佳值。</li>
</ul></li>
<li><strong>确定λ值</strong>：</li>
</ol>
<ul>
<li>在应用Box-Cox转换之前，需要确定最佳的λ值。</li>
<li>这通常通过最大化似然函数来实现，以确保变换后的数据最接近正态分布。</li>
</ul>
<ol start="3" style="list-style-type: decimal">
<li><strong>应用步骤</strong>：</li>
</ol>
<ul>
<li>首先，检查数据是否满足Box-Cox转换的前提条件，例如数据必须为正数。</li>
<li>然后，使用适当的统计方法（如最大似然估计）来确定最佳的λ值。</li>
<li>接着，根据确定的λ值对数据进行Box-Cox转换。</li>
<li>最后，验证变换后的数据是否更接近正态分布，并评估其对后续分析的影响。</li>
</ul>
<ol start="4" style="list-style-type: decimal">
<li><strong>注意事项</strong>：
<ul>
<li>Box-Cox转换要求原始数据中的因变量取值为正。如果数据中包含非正数（如零或负数），则需要进行适当的调整，例如通过添加一个常数来使所有数据变为正数。</li>
<li>尽管Box-Cox转换可以改善数据的正态性和其他统计特性，但并不能保证在所有情况下都能达到理想的效果。因此，在应用该转换后，仍需要仔细检查并验证数据的性质。</li>
</ul></li>
</ol>
<p>Box-Cox 转换是一种用于稳定方差和使数据更接近正态分布的幂转换方法。在 R 语言中，我们可以使用 <code>forecast</code> 包中的 <code>BoxCox</code> 函数来进行这种转换。</p>
<div class="sourceCode" id="cb271"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb271-1"><a href="数据探索性分析.html#cb271-1" tabindex="-1"></a><span class="fu">library</span>(forecast)</span></code></pre></div>
<pre><code>## Warning: package &#39;forecast&#39; was built under R version 4.4.2</code></pre>
<div class="sourceCode" id="cb273"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb273-1"><a href="数据探索性分析.html#cb273-1" tabindex="-1"></a><span class="fu">set.seed</span>(<span class="dv">123</span>)  <span class="co"># 为了可重复性</span></span>
<span id="cb273-2"><a href="数据探索性分析.html#cb273-2" tabindex="-1"></a>data <span class="ot">&lt;-</span> <span class="fu">rlnorm</span>(<span class="dv">100</span>)  <span class="co"># 生成一些对数正态分布的数据</span></span>
<span id="cb273-3"><a href="数据探索性分析.html#cb273-3" tabindex="-1"></a>bc_result <span class="ot">&lt;-</span> <span class="fu">BoxCox</span>(data, <span class="at">lambda =</span> <span class="st">&#39;auto&#39;</span>)  <span class="co"># 你可以调整 lambda 的范围和步长</span></span>
<span id="cb273-4"><a href="数据探索性分析.html#cb273-4" tabindex="-1"></a>optimal_lambda <span class="ot">&lt;-</span> <span class="fu">attr</span>(bc_result,<span class="st">&#39;lambda&#39;</span>)  <span class="co"># 最优的 lambda 值</span></span>
<span id="cb273-5"><a href="数据探索性分析.html#cb273-5" tabindex="-1"></a><span class="fu">print</span>(optimal_lambda)  <span class="co"># 打印最优的 lambda 值</span></span></code></pre></div>
<pre><code>## [1] -0.1615</code></pre>
<p>如果你需要对转换后的数据进行反向转换以恢复原始数据的尺度，可以使用以下公式：</p>
<p><span class="math inline">\(y = \begin{cases}
(x^{\frac{1}{\lambda}} - 1) / \lambda, &amp; \text{if } \lambda \neq 0 \\
\log(x), &amp; \text{if } \lambda = 0
\end{cases}\)</span></p>
<p>其中 <span class="math inline">\(x\)</span> 是转换后的数据，<span class="math inline">\(y\)</span> 是反向转换后的数据，<span class="math inline">\(\lambda\)</span> 是 Box-Cox 转换中使用的最优 lambda 值。</p>
<p>为了可视化转换的效果，你可以绘制原始数据和转换后的数据的分布图：</p>
<div class="sourceCode" id="cb275"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb275-1"><a href="数据探索性分析.html#cb275-1" tabindex="-1"></a><span class="fu">par</span>(<span class="at">mfrow =</span> <span class="fu">c</span>(<span class="dv">1</span>, <span class="dv">2</span>))  <span class="co"># 设置绘图区域为 1x2 的网格</span></span>
<span id="cb275-2"><a href="数据探索性分析.html#cb275-2" tabindex="-1"></a><span class="fu">hist</span>(data, <span class="at">main =</span> <span class="st">&quot;Original Data&quot;</span>, <span class="at">xlab =</span> <span class="st">&quot;Value&quot;</span>, <span class="at">breaks =</span> <span class="dv">20</span>)  <span class="co"># 绘制原始数据的直方图</span></span>
<span id="cb275-3"><a href="数据探索性分析.html#cb275-3" tabindex="-1"></a><span class="fu">hist</span>(bc_result, <span class="at">main =</span> <span class="st">&quot;Transformed Data&quot;</span>, <span class="at">xlab =</span> <span class="st">&quot;Value&quot;</span>, <span class="at">breaks =</span> <span class="dv">20</span>)  <span class="co"># 绘制转换后的数据的直方图</span></span></code></pre></div>
<p><img src="_main_files/figure-html/unnamed-chunk-84-1.png" width="672" /></p>
</div>
<div id="数据间相关性" class="section level4 hasAnchor" number="6.1.2.2">
<h4><span class="header-section-number">6.1.2.2</span> 数据间相关性<a href="数据探索性分析.html#数据间相关性" class="anchor-section" aria-label="Anchor link to header"></a></h4>
<p>衡量数据间相关性是进行数据分析、建模和预测的基础，主要有以下几种方法：</p>
<ul>
<li>作图法
要判断连个变量是否存在相关性，最简单的方式就是把其中一个变量作为x，另一个作为y，然后画到一个图上，看看这些点是否存在规律。如果是散乱而无任何规律，则表明两个变量之间无较强的相关性。</li>
</ul>
<p><img src="_main_files/figure-html/unnamed-chunk-85-1.png" width="672" /></p>
<div class="sourceCode" id="cb276"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb276-1"><a href="数据探索性分析.html#cb276-1" tabindex="-1"></a>y<span class="ot">=</span>x<span class="sc">+</span><span class="fu">rnorm</span>(<span class="dv">100</span>,<span class="at">sd=</span><span class="fl">0.3</span>)</span>
<span id="cb276-2"><a href="数据探索性分析.html#cb276-2" tabindex="-1"></a>y2<span class="ot">=</span>(x<span class="fl">-0.5</span>)<span class="sc">^</span><span class="dv">2</span><span class="sc">+</span><span class="fu">rnorm</span>(<span class="dv">100</span>,<span class="at">sd=</span><span class="fl">0.03</span>)</span>
<span id="cb276-3"><a href="数据探索性分析.html#cb276-3" tabindex="-1"></a>data<span class="ot">=</span><span class="fu">data.frame</span>(x,y,y2)</span>
<span id="cb276-4"><a href="数据探索性分析.html#cb276-4" tabindex="-1"></a></span>
<span id="cb276-5"><a href="数据探索性分析.html#cb276-5" tabindex="-1"></a><span class="fu">par</span>(<span class="at">mfrow=</span><span class="fu">c</span>(<span class="dv">1</span>,<span class="dv">2</span>))</span>
<span id="cb276-6"><a href="数据探索性分析.html#cb276-6" tabindex="-1"></a><span class="fu">plot</span>(<span class="at">x=</span>x,<span class="at">y=</span>y)</span>
<span id="cb276-7"><a href="数据探索性分析.html#cb276-7" tabindex="-1"></a><span class="fu">plot</span>(<span class="at">x=</span>x,<span class="at">y=</span>y2)</span></code></pre></div>
<p><img src="_main_files/figure-html/unnamed-chunk-86-1.png" width="672" /></p>
<ul>
<li><p>皮尔逊相关系数（Pearson Correlation Coefficient）： 这是衡量两个连续变量之间线性相关程度的指标。通常用 <span class="math inline">\(r\)</span> 或 <span class="math inline">\(\rho\)</span> 表示，是一种在统计学中常用的线性相关系数，用于衡量两个变量 <span class="math inline">\(X\)</span> 和 <span class="math inline">\(Y\)</span> 之间的线性相关程度。它的值域是 <span class="math inline">\([-1, 1]\)</span>，其中 <span class="math inline">\(1\)</span> 表示完全正相关，<span class="math inline">\(-1\)</span> 表示完全负相关，<span class="math inline">\(0\)</span> 表示无相关。</p>
<p>皮尔逊相关系数的公式如下：</p>
<p><span class="math display">\[r = \frac{\sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_{i=1}^{n} (x_i - \bar{x})^2} \sqrt{\sum_{i=1}^{n} (y_i - \bar{y})^2}}\]</span></p>
<p>其中：</p>
<ul>
<li><span class="math inline">\(x_i\)</span> 和 <span class="math inline">\(y_i\)</span> 是变量 <span class="math inline">\(X\)</span> 和 <span class="math inline">\(Y\)</span> 的观测值，</li>
<li><span class="math inline">\(\bar{x}\)</span> 和 <span class="math inline">\(\bar{y}\)</span> 是变量 <span class="math inline">\(X\)</span> 和 <span class="math inline">\(Y\)</span> 的均值，</li>
<li><span class="math inline">\(n\)</span> 是观测值的数量。</li>
</ul>
<p>这个公式实际上是计算两个变量的离均差乘积之和，然后除以两个变量各自离均差平方和的乘积的平方根。这样做可以消除量纲和均值的影响，从而更准确地反映两个变量之间的线性关系。</p></li>
<li><p>斯皮尔曼等级相关系数（Spearman’s Rank Correlation Coefficient）： 用于衡量两个变量的等级之间的相关性，属于非参数检验方法。 适用于数据不满足正态分布、存在异常值或非线性关系的情况。其公式如下：</p>
<p><span class="math display">\[ \rho = 1 - \frac{6 \sum_{i=1}^{n} d_i^2}{n(n^2 - 1)} \]</span></p>
<p>其中：</p>
<ul>
<li><span class="math inline">\(\rho\)</span>（rho）表示斯皮尔曼等级相关系数。</li>
<li><span class="math inline">\(d_i\)</span> 是每一对数据 <span class="math inline">\((x_i, y_i)\)</span> 的等级之差，即 <span class="math inline">\(d_i = R(x_i) - R(y_i)\)</span>，其中 <span class="math inline">\(R(x_i)\)</span> 和 <span class="math inline">\(R(y_i)\)</span> 分别是 <span class="math inline">\(x_i\)</span> 和 <span class="math inline">\(y_i\)</span> 在各自数据集中的等级。</li>
<li><span class="math inline">\(n\)</span> 是观测数据的对数。</li>
</ul>
<p>这个公式的核心思想是计算两个变量之间的等级差异，并通过这些差异来衡量它们之间的相关性。如果两个变量的等级完全一致，那么 <span class="math inline">\(\sum d_i^2\)</span> 将为0，此时 <span class="math inline">\(\rho\)</span> 为1，表示完全正相关。如果等级完全相反，虽然 <span class="math inline">\(\sum d_i^2\)</span> 不会为0，但是可以通过进一步的分析来确定是完全负相关。如果等级之间没有任何关联，则 <span class="math inline">\(\rho\)</span> 将接近0。</p>
<p>需要注意的是，斯皮尔曼等级相关系数只衡量了变量之间的单调关系，而不考虑具体的数值大小。因此，它对于非线性但单调的关系也是敏感的。此外，由于它基于等级而非实际数值，所以它对数据的极端值或异常值不太敏感，这使得它在某些情况下比皮尔逊相关系数更稳健。</p></li>
<li><p>肯德尔等级相关系数（Kendall’s Rank Correlation Coefficient）： 又称肯德尔τ系数（Kendall’s tau），是用于衡量两个随机变量之间等级相关性的强度和方向的统计指标。这个系数是非参数的，意味着它不需要数据服从特定的分布。</p>
<p>肯德尔等级相关系数的公式根据数据中是否存在重复值而有所不同。最常用的是Kendall’s tau-b，它考虑了重复排名的情况，适用于样本较小或存在相同排名的情况。其公式如下：</p>
<p><span class="math display">\[ \tau_b = \frac{C - D}{\sqrt{(C + D + T_1)(C + D + T_2)}} \]</span></p>
<p>其中：</p>
<ul>
<li><span class="math inline">\(C\)</span> 表示一致对的数量，即两个变量同时增加或减少的对数。</li>
<li><span class="math inline">\(D\)</span> 表示不一致对的数量，即一个变量增加而另一个变量减少的对数。</li>
<li><span class="math inline">\(T_1\)</span> 是在第一个变量中重复出现的排名的数量。</li>
<li><span class="math inline">\(T_2\)</span> 是在第二个变量中重复出现的排名的数量。</li>
<li><span class="math inline">\(n\)</span> 是样本的大小。</li>
</ul>
<p>如果数据中不存在重复排名，则可以使用Kendall’s tau-a，其公式简化为：</p>
<p><span class="math display">\[ \tau_a = \frac{C - D}{\frac{1}{2}n(n - 1)} \]</span></p>
<p>肯德尔等级相关系数的取值范围在-1到1之间：</p>
<ul>
<li>当 <span class="math inline">\(\tau = 1\)</span> 时，表示两个变量的等级完全一致，即完全正相关。</li>
<li>当 <span class="math inline">\(\tau = -1\)</span> 时，表示两个变量的等级完全相反，即完全负相关。</li>
<li>当 <span class="math inline">\(\tau = 0\)</span> 时，表示两个变量之间没有等级相关性。</li>
</ul>
<p>如果数据中存在大量的重复值，可能会影响系数的准确性。在这种情况下，应谨慎解释结果，并考虑使用其他统计方法。</p></li>
</ul>
<p>在R中，可以采用cor函数来计算不同变量间的相关性。</p>
<div class="sourceCode" id="cb277"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb277-1"><a href="数据探索性分析.html#cb277-1" tabindex="-1"></a><span class="fu">cor</span>(x,y,<span class="at">method =</span> <span class="st">&quot;pearson&quot;</span>)</span></code></pre></div>
<pre><code>## [1] 0.7108132</code></pre>
<div class="sourceCode" id="cb279"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb279-1"><a href="数据探索性分析.html#cb279-1" tabindex="-1"></a><span class="fu">cor</span>(x, y2, <span class="at">method=</span><span class="st">&quot;kendall&quot;</span>)</span></code></pre></div>
<pre><code>## [1] -0.01090909</code></pre>
<div class="sourceCode" id="cb281"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb281-1"><a href="数据探索性分析.html#cb281-1" tabindex="-1"></a><span class="fu">cor</span>(x, y2, <span class="at">method=</span><span class="st">&quot;spearman&quot;</span>)</span></code></pre></div>
<pre><code>## [1] -0.01164116</code></pre>
<p>在选择合适的相关性分析方法时，需要考虑数据的类型、分布特征以及研究目的。此外，相关性分析只是探索变量之间关系的一种手段，不能确定因果关系。因此，在分析数据时，应结合专业知识和研究背景进行综合判断。</p>
</div>
</div>
</div>
<div id="排序" class="section level2 hasAnchor" number="6.2">
<h2><span class="header-section-number">6.2</span> 排序<a href="数据探索性分析.html#排序" class="anchor-section" aria-label="Anchor link to header"></a></h2>
<div id="排序的原理" class="section level3 hasAnchor" number="6.2.1">
<h3><span class="header-section-number">6.2.1</span> 排序的原理<a href="数据探索性分析.html#排序的原理" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>排序的主要目的是将对象（在生态学中通常是采样点）显示到（多元）散布图中，也称为散点图。</p>
<p>这里就是一个二维的散点图：</p>
<div class="figure" style="text-align: center"><span style="display:block;" id="fig:ordexamp"></span>
<img src="_figures/ordination%20examples.jpeg" alt="有关水果的二维散点图" width="600px" />
<p class="caption">
图 6.1: 有关水果的二维散点图
</p>
</div>
<p>这些轴根据可识别的标准分散果实：</p>
<ul>
<li><p>易剥皮或难剥皮，甜味或酸味。</p></li>
<li><p>相似的水果聚集在一起；它们之间的距离很小。</p></li>
<li><p>非常不同的水果相距很远；它们之间的距离很大。</p></li>
<li><p>考虑到用于轴的变量，该图很好地表示了（或模拟了）水果之间的距离。</p></li>
</ul>
<p>生态数据的难点在于它们是多元的。每个变量在排序中都代表一个维度，因此会有许多维度。在生态学中，通常会对每个研究对象进行几个描述符的观察。例如，每个地点都可以观察到数百个物种和许多环境变量。在大多数情况下，生态学家感兴趣的不仅仅是几个描述符，而是描述关于所有描述符的对象变化的主要趋势。</p>
<p>排序这一方法，允许我们找到一个投影空间，该空间能够最好地以几个维度（通常是2或3个）总结数据。</p>
<div class="sourceCode" id="cb283"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb283-1"><a href="数据探索性分析.html#cb283-1" tabindex="-1"></a><span class="co">#构建一套展示的数据</span></span>
<span id="cb283-2"><a href="数据探索性分析.html#cb283-2" tabindex="-1"></a>data <span class="ot">&lt;-</span> <span class="fu">data.frame</span>(</span>
<span id="cb283-3"><a href="数据探索性分析.html#cb283-3" tabindex="-1"></a>  <span class="at">var1 =</span> <span class="fu">rnorm</span>(<span class="dv">100</span>),</span>
<span id="cb283-4"><a href="数据探索性分析.html#cb283-4" tabindex="-1"></a>  <span class="at">var2 =</span> <span class="fu">rnorm</span>(<span class="dv">100</span>,<span class="at">sd=</span><span class="dv">10</span>),</span>
<span id="cb283-5"><a href="数据探索性分析.html#cb283-5" tabindex="-1"></a>  <span class="at">var3 =</span> <span class="fu">rnorm</span>(<span class="dv">100</span>,<span class="at">sd=</span><span class="dv">5</span>)</span>
<span id="cb283-6"><a href="数据探索性分析.html#cb283-6" tabindex="-1"></a>)</span>
<span id="cb283-7"><a href="数据探索性分析.html#cb283-7" tabindex="-1"></a><span class="fu">library</span>(rgl)</span>
<span id="cb283-8"><a href="数据探索性分析.html#cb283-8" tabindex="-1"></a><span class="fu">rgl.open</span>()</span>
<span id="cb283-9"><a href="数据探索性分析.html#cb283-9" tabindex="-1"></a><span class="fu">rgl.points</span>(data,<span class="at">color=</span><span class="st">&quot;green&quot;</span>,<span class="at">size=</span><span class="dv">6</span>)</span>
<span id="cb283-10"><a href="数据探索性分析.html#cb283-10" tabindex="-1"></a><span class="fu">rgl.lines</span>(<span class="at">x=</span><span class="fu">c</span>(<span class="sc">-</span><span class="dv">1</span>,<span class="dv">1</span>),<span class="at">y=</span><span class="fu">c</span>(<span class="dv">0</span>,<span class="dv">0</span>),<span class="at">z=</span><span class="fu">c</span>(<span class="dv">0</span>,<span class="dv">0</span>))</span>
<span id="cb283-11"><a href="数据探索性分析.html#cb283-11" tabindex="-1"></a><span class="fu">rgl.lines</span>(<span class="at">y=</span><span class="fu">c</span>(<span class="sc">-</span><span class="dv">1</span>,<span class="dv">1</span>),<span class="at">x=</span><span class="fu">c</span>(<span class="dv">0</span>,<span class="dv">0</span>),<span class="at">z=</span><span class="fu">c</span>(<span class="dv">0</span>,<span class="dv">0</span>))</span>
<span id="cb283-12"><a href="数据探索性分析.html#cb283-12" tabindex="-1"></a><span class="fu">rgl.lines</span>(<span class="at">z=</span><span class="fu">c</span>(<span class="sc">-</span><span class="dv">1</span>,<span class="dv">1</span>),<span class="at">x=</span><span class="fu">c</span>(<span class="dv">0</span>,<span class="dv">0</span>),<span class="at">y=</span><span class="fu">c</span>(<span class="dv">0</span>,<span class="dv">0</span>))</span>
<span id="cb283-13"><a href="数据探索性分析.html#cb283-13" tabindex="-1"></a><span class="fu">rgl.texts</span>(<span class="dv">1</span>,<span class="dv">0</span>,<span class="dv">0</span>,<span class="st">&quot;Axis1&quot;</span>)</span>
<span id="cb283-14"><a href="数据探索性分析.html#cb283-14" tabindex="-1"></a><span class="fu">rgl.texts</span>(<span class="dv">0</span>,<span class="dv">1</span>,<span class="dv">0</span>,<span class="st">&quot;Axis2&quot;</span>)</span>
<span id="cb283-15"><a href="数据探索性分析.html#cb283-15" tabindex="-1"></a><span class="fu">rgl.texts</span>(<span class="dv">0</span>,<span class="dv">0</span>,<span class="dv">1</span>,<span class="st">&quot;Axis3&quot;</span>)</span>
<span id="cb283-16"><a href="数据探索性分析.html#cb283-16" tabindex="-1"></a><span class="co">#Rotate the graph in 3-D by moving the axes</span></span>
<span id="cb283-17"><a href="数据探索性分析.html#cb283-17" tabindex="-1"></a></span>
<span id="cb283-18"><a href="数据探索性分析.html#cb283-18" tabindex="-1"></a><span class="co">#Is there a position where the points have maximum dispersion?</span></span>
<span id="cb283-19"><a href="数据探索性分析.html#cb283-19" tabindex="-1"></a><span class="co">#What is the statistical term for “dispersion” ?</span></span></code></pre></div>
</div>
<div id="排序基本原理" class="section level3 hasAnchor" number="6.2.2">
<h3><span class="header-section-number">6.2.2</span> 排序基本原理<a href="数据探索性分析.html#排序基本原理" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>在降维空间中进行排序的基本原理如下。设想一个n×p的数据集，其中包含n个对象和p个变量。我们可以把这n个对象看作是p维空间中的一组点。但请注意，这组点形成的点群通常并非球形，而是在某些方向上被拉长，在另一些方向上被压扁。重要的是，这些拉长或压扁的方向并不一定与多维空间中的单一维度（即某一个变量）完全对应。</p>
<p>点群被拉长最严重的方向，也就是点群方差最大的方向，这将是排序过程中首先提取出来的轴。实际上，方差最大的方向反映了数据中存在的最显著的梯度变化，这也是最重要信息所在之处。接下来要提取的轴，则是方差次大的方向，但前提是它必须与第一个轴保持正交（即线性独立，且标量积为0）。按照这样的逻辑，我们会一直继续这个过程，直到计算出所有需要的轴。</p>
<p>当数据中仅包含几个主要结构（如梯度或群组），并且我们的方法能够有效地提取这些信息时，那么前几个轴就已经囊括了大部分有价值的信息。也就是说，这些轴已经捕捉到了数据中的大部分方差。在这种情况下，降维空间（通常是二维的）中的投影点之间的距离，与原始多维空间中对象之间的距离会非常接近。</p>
<p>但值得注意的是，即使前几个轴解释的方差比例不高，排序方法仍然有其价值。特别是在一个原本充满噪声但隐藏着一些有趣结构的数据集中，这种情况更为明显。</p>
<p>此时，一个问题自然浮现：我们应该保留并解释多少个轴呢？换句话说，有多少个轴能够真正代表数据中可解释的结构？这个问题的答案并非一成不变，它取决于我们使用的具体方法以及数据的特性。</p>
</div>
<div id="主成分分析" class="section level3 hasAnchor" number="6.2.3">
<h3><span class="header-section-number">6.2.3</span> 主成分分析<a href="数据探索性分析.html#主成分分析" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>设想一个数据集，其中的变量都服从正态分布。这样的数据集，我们称之为呈现多元正态分布。当我们对这个数据集进行主成分分析（PCA）时，得到的第一主轴（或称为主成分轴）是一条特殊的直线。这条直线穿过了描述该多元正态分布的集中椭球体的最大维度。而接下来的那些轴，它们都是互相垂直的，且长度逐个递减，分别穿过了椭球体的次大维度（Legendre和Legendre，2012）。值得注意的是，从一个包含p个变量的数据集中，我们最多能够提取出p个这样的主轴。</p>
<div class="sourceCode" id="cb284"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb284-1"><a href="数据探索性分析.html#cb284-1" tabindex="-1"></a>spiders <span class="ot">=</span> <span class="fu">read.table</span>(<span class="st">&quot;./_data/Spiders_28x12_spe.txt&quot;</span>)</span>
<span id="cb284-2"><a href="数据探索性分析.html#cb284-2" tabindex="-1"></a><span class="co"># Hellinger transformation of the spider data</span></span>
<span id="cb284-3"><a href="数据探索性分析.html#cb284-3" tabindex="-1"></a><span class="fu">library</span>(vegan)</span></code></pre></div>
<pre><code>## Warning: package &#39;vegan&#39; was built under R version 4.4.2</code></pre>
<pre><code>## Warning: package &#39;permute&#39; was built under R version 4.4.2</code></pre>
<div class="sourceCode" id="cb287"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb287-1"><a href="数据探索性分析.html#cb287-1" tabindex="-1"></a>spiders.hel <span class="ot">=</span> <span class="fu">decostand</span>(spiders,<span class="st">&quot;hellinger&quot;</span>)</span>
<span id="cb287-2"><a href="数据探索性分析.html#cb287-2" tabindex="-1"></a><span class="co"># PCA using function prcomp() of {stats}</span></span>
<span id="cb287-3"><a href="数据探索性分析.html#cb287-3" tabindex="-1"></a>pca.spiders <span class="ot">=</span> <span class="fu">prcomp</span>(spiders.hel) </span>
<span id="cb287-4"><a href="数据探索性分析.html#cb287-4" tabindex="-1"></a>spiders.sites <span class="ot">=</span> <span class="fu">summary</span>(pca.spiders)<span class="sc">$</span>x[,<span class="dv">1</span><span class="sc">:</span><span class="dv">3</span>]</span>
<span id="cb287-5"><a href="数据探索性分析.html#cb287-5" tabindex="-1"></a></span>
<span id="cb287-6"><a href="数据探索性分析.html#cb287-6" tabindex="-1"></a><span class="fu">plot</span>(<span class="at">x=</span>spiders.sites[,<span class="dv">1</span>], <span class="at">y=</span>spiders.sites[,<span class="dv">2</span>], </span>
<span id="cb287-7"><a href="数据探索性分析.html#cb287-7" tabindex="-1"></a>     <span class="at">xlab=</span><span class="st">&quot;PCA1&quot;</span>, <span class="at">ylab=</span><span class="st">&quot;PCA2&quot;</span>)</span></code></pre></div>
<p><img src="_main_files/figure-html/unnamed-chunk-89-1.png" width="672" /></p>
<p>换句话说，PCA实际上是对原始坐标轴系统进行了旋转操作。这个原始系统是由数据集中的变量所定义的。旋转后的新轴，我们称之为主成分，它们之间都是互相垂直的。更重要的是，这些新轴恰好与数据点散布的最大方差维度相对应。因此，主成分实际上给出了数据对象在这个新坐标系中的准确位置。</p>
<p>PCA是作用于一个称为离散矩阵S的特殊矩阵上的。这个S矩阵描述了变量之间的关系，它包含了变量的方差和协方差（当这些变量在维度上具有相同性质时），或者是由不同性质的变量所计算出的相关性。需要强调的是，PCA是专门为分析定量变量而设计的。它所保留的差异性是基于欧几里得距离的，而它所检测到的关系则是线性的。因此，PCA通常并不适合直接用于分析原始的物种丰度数据。不过，如果我们先对这些数据进行适当的预处理，那么PCA分析就可以派上用场了。</p>
<p>在主成分分析（PCA）排序图中，我们遵循笛卡尔坐标系散点图的惯例，将各个对象用点来表示，而变量则用箭头来展示。</p>
<p>除了stats包中内置的函数外，vegan包中内置了更加全面的PCA分析函数rda。</p>
<div class="sourceCode" id="cb288"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb288-1"><a href="数据探索性分析.html#cb288-1" tabindex="-1"></a>pca.spiders2<span class="ot">=</span><span class="fu">rda</span>(spiders, <span class="at">scale=</span><span class="cn">TRUE</span>) <span class="co">#注意scale是用来标准化列的</span></span>
<span id="cb288-2"><a href="数据探索性分析.html#cb288-2" tabindex="-1"></a><span class="fu">plot</span>(pca.spiders2)</span></code></pre></div>
<p><img src="_main_files/figure-html/unnamed-chunk-90-1.png" width="672" /></p>
<div class="sourceCode" id="cb289"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb289-1"><a href="数据探索性分析.html#cb289-1" tabindex="-1"></a><span class="fu">biplot</span>(pca.spiders2, <span class="at">scaling =</span> <span class="dv">1</span>, <span class="at">type=</span><span class="st">&quot;points&quot;</span>)</span></code></pre></div>
<p><img src="_main_files/figure-html/unnamed-chunk-91-1.png" width="672" /></p>
<p>请注意，这里提到的“比例（scaling）”并非指要求变量标准化的“比例（scale）”参数，而是指将排序结果在简化空间中以图形方式投影出来的方法。在主成分分析（PCA）双标图（同时展示位点和变量两种结果的图）中，并不存在一种唯一的最佳方式来同时展示对象和变量。通常，我们会采用两种主要的比例类型，而为了正确解读双标图，我们必须充分了解并牢记这两种比例类型各自的特性。</p>
<p>scaling=1，即距离双标图：在这种比例中，特征向量会被缩放到单位长度。（1）这样，双标图中各对象间的距离就近似于它们在多维空间中的欧几里得距离。（2）但需注意，描述符向量之间的夹角并不反映它们之间的相关性。</p>
<p>scaling=2，即相关双标图：在这种比例中，每个特征向量都会根据其特征值的平方根进行缩放。（1）因此，双标图中对象间的距离并不直接反映它们在多维空间中的欧几里得距离。（2）然而，双标图中描述符之间的夹角却能反映出它们之间的相关性。</p>
<div class="sourceCode" id="cb290"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb290-1"><a href="数据探索性分析.html#cb290-1" tabindex="-1"></a><span class="fu">biplot</span>(pca.spiders2, <span class="at">scaling =</span> <span class="dv">2</span>, <span class="at">type=</span><span class="st">&quot;points&quot;</span>)</span></code></pre></div>
<p><img src="_main_files/figure-html/unnamed-chunk-92-1.png" width="672" /></p>
<div id="局限性" class="section level4 hasAnchor" number="6.2.3.1">
<h4><span class="header-section-number">6.2.3.1</span> 局限性<a href="数据探索性分析.html#局限性" class="anchor-section" aria-label="Anchor link to header"></a></h4>
<p>主成分分析虽功能强大，却也存在局限性。在生态学领域，其主要用途在于根据定量环境变量对地点进行排序；同样，在适当的数据转换后，也可对群落组成数据进行排序。最初，主成分分析是专为多元正态分布的数据设计的。但在生态学的实际应用中，只要数据分布不过度偏斜，主成分分析对多元正态性的偏离并不十分敏感。主成分分析的核心计算步骤，在于对分散矩阵（即线性协方差或相关性）进行特征分解。而计算协方差，则必须基于定量数据；当然，对于二进制数据，需另行处理。</p>
</div>
<div id="包含缺失值的pca" class="section level4 hasAnchor" number="6.2.3.2">
<h4><span class="header-section-number">6.2.3.2</span> 包含缺失值的PCA<a href="数据探索性分析.html#包含缺失值的pca" class="anchor-section" aria-label="Anchor link to header"></a></h4>
<p>在理想情况下，数据应该是完美的：信号明确、噪声极少，更重要的是，不存在任何缺失值。然而，实际情况往往并非如此。由于种种原因，即便是在一个原本质量上乘、富有研究价值的数据集中，也难免会出现缺失值，这确实带来了不小的挑战。要知道，我们无法在一个不完整的数据矩阵上进行主成分分析（PCA）。</p>
<p>那么，面对这种情况，我们应该如何应对呢？是简单地删除那些包含缺失值的行或列，从而牺牲掉那些宝贵的数据吗？还是尝试用某种有意义的方式来填补这些缺失值，比如使用相应变量的平均值，或者通过涉及其他变量的回归分析来得出估计值？尽管这两种方法看似可行，但它们都忽略了一个重要的问题：对缺失值的估计及其在后续分析中的使用所伴随的不确定性。这种忽视会导致基于估算数据集计算出的标准误差被低估，进而在使用这些数据进行测试时可能得出无效的结论。</p>
<p>为了弥补这一不足，Josse和Husson在2012年提出了一种“正则化迭代主成分分析算法”，该算法能够提供对主轴和主成分的点估计。并且，他们已经将所有功能都集中在了missMDA包的imputePCA函数中。与vegan中使用的方法不同，这种算法是逐轴进行迭代计算的。当数据中存在缺失值时，算法会首先用相应变量的平均值来替换它们。然后，进行主成分分析，并根据分析结果对缺失值进行新的估计。这一过程会不断重复，直到达到收敛状态，即估算值趋于稳定。此外，该算法还采用了复杂的程序来避免估算模型的过度拟合问题（即当缺失值较多时，需要调整的参数数量相对于数据量来说过多），并解决估算数据方差被低估的问题。</p>
<p>但值得注意的是，使用不同数量的主成分分析轴来估算缺失值所得到的主成分分析解决方案并不是嵌套的。也就是说，基于s个轴得到的解决方案与基于（s+1）或（s+2）个轴得到的解决方案中的前s个轴并不完全相同。因此，在事先确定所需轴的数量时，我们必须谨慎行事。这一决策可以基于经验（例如，选择那些特征值之和大于折断棒模型预测值的轴），也可以通过对数据本身进行交叉验证来得出。在交叉验证过程中，我们会删除部分数据，然后在1到（n-1）维的主成分分析中进行重建，并计算重建误差。最终，我们会选择那个能够使重建误差最小化的维度数。</p>
</div>
</div>
<div id="对应分析" class="section level3 hasAnchor" number="6.2.4">
<h3><span class="header-section-number">6.2.4</span> 对应分析<a href="数据探索性分析.html#对应分析" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>分析方法本身并不能决定是否适用于所分析的数据。是否合适这一问题需要分析者自身来判断。正如上面的例子中，主成分分析可以基于物种组成数据产生结果，但这些结果是否合适呢？</p>
<div id="双重零值问题" class="section level4 hasAnchor" number="6.2.4.1">
<h4><span class="header-section-number">6.2.4.1</span> 双重零值问题<a href="数据探索性分析.html#双重零值问题" class="anchor-section" aria-label="Anchor link to header"></a></h4>
<p>在物种丰度（或存在与否）矩阵中，零值的解读尤为复杂。若某一物种同时出现在两个地点，通常意味着这两个地点提供了类似的生存条件，满足了该物种生存所需的最基本要求，这些条件构成了物种的生态位维度。然而，若某一物种在特定地点未被发现，其背后的原因可能多种多样：可能是因为该物种的生态位被其他物种所占据，或是因为尽管环境适宜，但该物种尚未迁移至此地，又或者是因为该地点的某些重要生态维度并未达到物种生存所需的最优条件，还有可能是因为该物种虽存在但未被研究者观测到，甚至可能是因为该物种在研究区域内的分布并不均匀。重要的是，我们需要明确两点：（1）在多数情况下，不能仅凭两个地点都未发现某一物种就断定这两个地点具有相似性，因为这种“双重缺失”可能源于截然不同的原因；（2）在物种矩阵中，无法明确解释的双重零值数量与物种总数息息相关，且随着矩阵中稀有物种数量的增多而显著增加。</p>
<p>因此，相比“缺失”信息，“存在”信息更易于解读。基于这一问题，我们可以将关联度量分为两类：一类是将双重零值（有时也称为“负匹配”）视为与其他任何数值一样，能表明相似性的系数，我们称之为对称系数；另一类则不然，我们称之为非对称系数。在分析物种数据时，除非有充分理由认为两个地点均缺失某一物种是出于同一原因，且这种情况适用于所有双重零值，否则在大多数情况下，使用非对称系数更为妥当。例如，在已知群落组成的对照实验或生态均质区域中存在干扰区的情况下，我们可能会考虑使用对称系数。</p>
<p>长期以来，对应分析（简称CA）在分析物种存在与否或丰度数据方面备受青睐，因为CA所基于的χ2距离不受双重零值影响，它是一种非对称D函数。因此，对应分析特别适用于直接分析物种丰度数据，无需进行预先转换。但需注意，提交给对应分析的数据必须满足特定条件：它们应是频率数据或类似频率的数据、在维度上保持同质且非负，例如物种计数、生物量数据或表示物种存在与否的数据。</p>
<div class="sourceCode" id="cb291"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb291-1"><a href="数据探索性分析.html#cb291-1" tabindex="-1"></a>ca.spiders<span class="ot">=</span><span class="fu">cca</span>(spiders, <span class="at">scale=</span><span class="cn">TRUE</span>) <span class="co">#注意scale是用来标准化列的</span></span>
<span id="cb291-2"><a href="数据探索性分析.html#cb291-2" tabindex="-1"></a><span class="fu">plot</span>(ca.spiders)</span></code></pre></div>
<p><img src="_main_files/figure-html/unnamed-chunk-93-1.png" width="672" /></p>
</div>
</div>
<div id="常用的几种排序分析" class="section level3 hasAnchor" number="6.2.5">
<h3><span class="header-section-number">6.2.5</span> 常用的几种排序分析<a href="数据探索性分析.html#常用的几种排序分析" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<table style="width:99%;">
<colgroup>
<col width="51%" />
<col width="18%" />
<col width="28%" />
</colgroup>
<thead>
<tr class="header">
<th>方法</th>
<th>保留的差异</th>
<th>变量类型</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>主成分分析</p>
<p>Principal component analysis （PCA）</p></td>
<td>欧式距离</td>
<td>数值变量的线性关系</td>
</tr>
<tr class="even">
<td><p>对应分析</p>
<p>Correspondance analysis （CA）</p></td>
<td>卡方距离</td>
<td>频率或二值数据</td>
</tr>
<tr class="odd">
<td><p>主轴分析</p>
<p>Principle coordinate analysis （PCoA）</p></td>
<td>任何距离</td>
<td>数值或半数值，定性数据</td>
</tr>
<tr class="even">
<td><p>非度量多维尺度分析</p>
<p>Non-metric multidimensional scaling (nMDS)</p></td>
<td>任何距离</td>
<td>数值或半数值，定性数据</td>
</tr>
<tr class="odd">
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="聚类" class="section level2 hasAnchor" number="6.3">
<h2><span class="header-section-number">6.3</span> 聚类<a href="数据探索性分析.html#聚类" class="anchor-section" aria-label="Anchor link to header"></a></h2>
<p>在复杂的生态分析中，聚类技术旨在辨识出不连续的子集，这些子集有时呈现离散特性（如分类学中的情形），但更多时候被视为连续变化的（如在生态学研究中）。为实现这一目标，我们需要某种程度的抽象思维。生态学家往往期望获得一种简化且结构清晰的数据视图，而生成拓扑结构便是满足这一需求的有效手段。在某些研究场景下，会将所得的拓扑结构与基于理论或其他独立数据来源所构建的分类体系进行对比分析。正是一系列方法，它们能够帮助我们判断哪些对象因足够相似而可归入同一组别，以及如何准确识别不同组别间的差异与界限。</p>
<p>聚类操作涉及对所研究对象的集合进行科学的划分。硬划分是指将整体集合分割成若干个子集，且在此划分下，每个对象仅隶属于一个子集。例如，在严格的分类学中，一个物种不能同时归属于两个不同的属：其成员资格是明确且唯一的（非0即1）。相较之下，某些更为灵活的方法则考虑到了模糊划分的可能性，即允许成员资格以连续的方式存在（介于0和1之间）。聚类模型的不同选择，将决定最终结果是单一的划分还是一系列具有层次嵌套关系的划分。聚类分析有助于揭示隐藏在数据中的某些特征；而这些特征是否有趣、是否值得用生态学的专业术语来解释，则取决于研究者的判断。</p>
<p>大多数聚类方法都是基于关联矩阵进行计算的，这凸显了选择适当关联系数的重要性。</p>
<p>聚类方法因其所采用的算法而异，具体包括以下几类主要的聚类方法：</p>
<ul>
<li><p>顺序算法与同步算法：大多数聚类算法采用顺序方式，通过反复执行特定过程，直至所有对象都找到其归属位置。少量使用的同步算法，他们能够在单个步骤内找到解决方案。</p></li>
<li><p>聚合算法与分裂算法：在顺序算法中，聚合过程从离散的对象集合开始，逐步将这些对象组合成越来越大的簇群，直至形成一个包含所有对象的单一簇群。相反地，分裂算法则是从被视为单一整体的对象集合开始，逐步将其划分为更小的子组，依此类推，直至对象完全分离。在任何情况下，都由研究者根据研究问题的具体需求来决定应保留哪些中间划分结果。</p></li>
<li><p>单系算法与多系算法：分裂算法可进一步分为单系和多系两类。单系算法在每个划分步骤中仅使用单个被认为是最佳的描述符来进行划分，而多系算法则同时使用所有描述符；在大多数情况下，这些描述符会被整合成一个关联矩阵来加以运用。</p></li>
<li><p>层次算法与非层次算法：层次算法的特点是，在较低级别形成的簇群成员会成为较高级别、更大簇群的成员。这类算法在大多数情况下会产生非重叠的簇群结构。而非层次算法（如k均值划分）则只会生成一个单一的划分结果，且不同组别之间不存在层次关系。</p></li>
<li><p>概率算法与非概率算法：概率算法定义组别的方式是确保组内关联矩阵具有给定概率的同质性特征。这类算法有时会被应用于物种关联的定义研究中。</p></li>
<li><p>非约束算法与约束算法：非约束聚类仅依赖于单个数据集的信息来进行操作，而约束聚类则同时运用两个矩阵：一个作为被聚类的对象集合，另一个则包含一组解释变量；这些解释变量提供了关于如何对第一个矩阵中的数据进行分组或划分的约束条件（或指导原则）。</p></li>
</ul>
<p>在生态学家的研究工具箱中，上述各类方法的分布并不均衡。接下来我们将详细介绍的大多数方法都属于顺序的、聚合的和层次的方法，但也会涉及一些如k均值划分这样的分裂且非层次的方法。其中有两种方法特别值得我们关注：Ward的层次聚类和k均值划分都采用了最小二乘法作为其核心原理。这一特性使得它们与线性模型之间建立了紧密的联系。此外，我们还将深入探讨两种约束聚类方法——一种是带有顺序约束的方法，另一种更为通用的方法则被称为多元回归树分析（简称MRT）。</p>
<p>层次聚类的结果通常以树状图或类似图形的方式来呈现。而非层次过程则会生成对象（或变量）组别，这些组别可以进一步用于后续分析、作为最终研究成果来展示（例如揭示物种之间的关联关系），或者在研究对象具有空间属性时，被映射到所研究的地理区域上。</p>
<div id="层次聚类" class="section level3 hasAnchor" number="6.3.1">
<h3><span class="header-section-number">6.3.1</span> 层次聚类<a href="数据探索性分析.html#层次聚类" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<div id="单链接聚类" class="section level4 hasAnchor" number="6.3.1.1">
<h4><span class="header-section-number">6.3.1.1</span> 单链接聚类<a href="数据探索性分析.html#单链接聚类" class="anchor-section" aria-label="Anchor link to header"></a></h4>
<p>这种方法的基本原理是依据对象间的最短成对差异（或最大相似度）来聚合这些对象。具体地说，当需要在特定的相似度（或差异度）水平上将某个对象（或一组对象）与另一组对象融合时，仅需要确保这两组待聚合的对象中，各有一个对象在该相似度水平上实现互联。两组对象的聚合发生在它们成员中最接近的一对对象所对应的差异度水平上，从而简化了聚合过程。</p>
<p>因此，在单链接聚类的树状图中，我们经常会看到对象间形成一种链式连接：即一对对象连接到第三个对象，然后第三个对象再连接到另一个对象，如此类推。这样的结果可能使得从分区的角度来解释变得较为困难，但其中的梯度变化却表现得非常清晰。我们称那些首次将某个对象纳入集群，或是使两个集群得以合并的连接为“主要连接链”，这些连接链共同构成了所谓的“最小生成树”（minimum spanning tree, MST）。</p>
<p>常用的层次聚类方法可以用stats包的hclust函数实现。</p>
<div class="sourceCode" id="cb292"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb292-1"><a href="数据探索性分析.html#cb292-1" tabindex="-1"></a><span class="co">#The Euclidean distance function applied to chi-square-transformed data produces a chi-square distance matrix</span></span>
<span id="cb292-2"><a href="数据探索性分析.html#cb292-2" tabindex="-1"></a>spiders<span class="ot">=</span><span class="fu">decostand</span>(spiders, <span class="st">&quot;chi.square&quot;</span>)</span>
<span id="cb292-3"><a href="数据探索性分析.html#cb292-3" tabindex="-1"></a>spiders.cor<span class="ot">=</span><span class="fu">vegdist</span>(spiders, <span class="at">method =</span> <span class="st">&quot;euclidean&quot;</span>)</span>
<span id="cb292-4"><a href="数据探索性分析.html#cb292-4" tabindex="-1"></a><span class="fu">attr</span>(spiders.cor, <span class="st">&#39;labels&#39;</span>)<span class="ot">=</span><span class="fu">rownames</span>(spiders)</span>
<span id="cb292-5"><a href="数据探索性分析.html#cb292-5" tabindex="-1"></a>spiders.single <span class="ot">=</span> <span class="fu">hclust</span>(spiders.cor, <span class="at">method =</span> <span class="st">&quot;single&quot;</span>)</span>
<span id="cb292-6"><a href="数据探索性分析.html#cb292-6" tabindex="-1"></a><span class="fu">plot</span>(spiders.single)</span></code></pre></div>
<p><img src="_main_files/figure-html/unnamed-chunk-94-1.png" width="672" /></p>
</div>
<div id="全链接聚类" class="section level4 hasAnchor" number="6.3.1.2">
<h4><span class="header-section-number">6.3.1.2</span> 全链接聚类<a href="数据探索性分析.html#全链接聚类" class="anchor-section" aria-label="Anchor link to header"></a></h4>
<p>与单链接聚类不同，全链接聚类要求一个对象（或一组对象）仅在与另一组中最远距离的对象对应的不相似度水平时，才能与该组进行聚合。换言之，只有当两组中所有成员均达到某种连接要求时，它们之间的聚合才会发生。</p>
<div class="sourceCode" id="cb293"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb293-1"><a href="数据探索性分析.html#cb293-1" tabindex="-1"></a>spiders.complete <span class="ot">=</span> <span class="fu">hclust</span>(spiders.cor, <span class="at">method =</span> <span class="st">&quot;complete&quot;</span>)</span>
<span id="cb293-2"><a href="数据探索性分析.html#cb293-2" tabindex="-1"></a><span class="fu">plot</span>(spiders.complete)</span></code></pre></div>
<p><img src="_main_files/figure-html/unnamed-chunk-95-1.png" width="672" /></p>
<p>对比两种方法的树状图，可以清晰地看到它们在理念和结果上的差异。在单链接聚类中，对象能够较容易地加入某个组，仅需与组中的任一对象建立连接即可实现融合，类似于“找到最亲近的朋友”。然而，这种方法生成的树状图并不总能明确展示出不同的组别，但可用于识别数据中的渐变趋势。</p>
<p>相对而言，全链接聚类则表现出更为鲜明的对比。一个新对象只有在与组中最远距离的对象相对应的不相似度水平时，才能被该组接纳，这几乎需要组内所有成员的“一致同意”。因此，组别越大，与其发生聚合的难度也就越高。全链接聚类倾向于形成众多小型独立组，这些组在多元空间中多呈球形，并在较大的距离上实现聚合。这使得该方法在搜索和识别数据中的不连续性时具有独特的优势。</p>
</div>
<div id="平均聚类" class="section level4 hasAnchor" number="6.3.1.3">
<h4><span class="header-section-number">6.3.1.3</span> 平均聚类<a href="数据探索性分析.html#平均聚类" class="anchor-section" aria-label="Anchor link to header"></a></h4>
<p>这个家族包含四种方法，它们都是基于对象间的平均差异度或聚类的质心来进行的。这些方法在计算组位置时有所不同，有的采用算术平均值，有的则采用质心；同时，在计算融合水平时，这些方法还会根据组中所包含对象的数量来决定是否对组进行加权处理。</p>
<p>其中，最为人所熟知的方法是UPGMA（Unweighted pair-group method using arithmetric averages）。在这种方法中，一个对象要加入某个组时，其加入的位置是由该对象与组中所有成员间的差异度平均值所决定的。同样地，当两个组要进行合并时，合并的位置也是由一个组的所有成员与另一个组的所有成员间的差异度平均值所确定的。接下来，我们将把这一方法应用到我们的数据上：</p>
<div class="sourceCode" id="cb294"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb294-1"><a href="数据探索性分析.html#cb294-1" tabindex="-1"></a>spiders.upgma <span class="ot">=</span> <span class="fu">hclust</span>(spiders.cor, <span class="at">method =</span> <span class="st">&quot;average&quot;</span>)</span>
<span id="cb294-2"><a href="数据探索性分析.html#cb294-2" tabindex="-1"></a><span class="fu">plot</span>(spiders.upgma)</span></code></pre></div>
<p><img src="_main_files/figure-html/unnamed-chunk-96-1.png" width="672" /></p>
</div>
<div id="ward最小方差聚类" class="section level4 hasAnchor" number="6.3.1.4">
<h4><span class="header-section-number">6.3.1.4</span> Ward最小方差聚类<a href="数据探索性分析.html#ward最小方差聚类" class="anchor-section" aria-label="Anchor link to header"></a></h4>
<p>这个方法建立在最小二乘法的线性模型准则之上。方法的目标是定义出这样的组：使得每个组内部的平方和（也就是方差分析中的平方误差）达到最小。聚类内部的平方误差和可以通过计算聚类中各个成员之间距离的平方和，再除以成员的数量来得出。值得注意的是，尽管组内平方和的计算是基于欧几里得模型，但Ward方法在处理欧几里得或非欧几里得不相似度时都能产生有意义的结果。</p>
<div class="sourceCode" id="cb295"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb295-1"><a href="数据探索性分析.html#cb295-1" tabindex="-1"></a>spiders.ward <span class="ot">=</span> <span class="fu">hclust</span>(spiders.cor, <span class="at">method =</span> <span class="st">&quot;ward.D&quot;</span>)</span>
<span id="cb295-2"><a href="数据探索性分析.html#cb295-2" tabindex="-1"></a><span class="fu">plot</span>(spiders.ward)</span></code></pre></div>
<p><img src="_main_files/figure-html/unnamed-chunk-97-1.png" width="672" /></p>
</div>
<div id="聚类结果的解读" class="section level4 hasAnchor" number="6.3.1.5">
<h4><span class="header-section-number">6.3.1.5</span> 聚类结果的解读<a href="数据探索性分析.html#聚类结果的解读" class="anchor-section" aria-label="Anchor link to header"></a></h4>
<p>请记住，无约束聚类并非统计检验，而是一种启发式过程。所选的关联系数和聚类方法均会对最终结果产生影响。因此，选择与分析目标相契合的方法至关重要。</p>
<div id="共表型距离" class="section level5 hasAnchor" number="6.3.1.5.1">
<h5><span class="header-section-number">6.3.1.5.1</span> 共表型距离<a href="数据探索性分析.html#共表型距离" class="anchor-section" aria-label="Anchor link to header"></a></h5>
<p>在树状图中，两个对象间的共表型距离指的是它们成为同一组成员时的距离。选择任意两个对象，从其中一个出发，“沿树向上”找到第一个连接至第二个对象的节点：在距离尺度上，该节点所处的层级即为这两个对象的共表型距离（Cophenetic distance）。共表型矩阵则是一个能够展示所有对象对之间共表型距离的矩阵。</p>
<div class="sourceCode" id="cb296"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb296-1"><a href="数据探索性分析.html#cb296-1" tabindex="-1"></a>cop_dist_single<span class="ot">=</span><span class="fu">cophenetic</span>(spiders.single)</span>
<span id="cb296-2"><a href="数据探索性分析.html#cb296-2" tabindex="-1"></a>cop_dist_complete<span class="ot">=</span><span class="fu">cophenetic</span>(spiders.complete)</span></code></pre></div>
<p>我们可以在原始不相似度矩阵与共表型矩阵之间计算皮尔逊r相关性，这种相关性在此情境下被称作共表型相关性（cophenetic correlation）。具有较高共表型相关性的方法，往往能够产生最大程度保留不相似度矩阵信息的聚类模型。但请注意，这并不意味着该聚类模型最符合研究者的目标。</p>
<div class="sourceCode" id="cb297"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb297-1"><a href="数据探索性分析.html#cb297-1" tabindex="-1"></a><span class="fu">cor</span>(spiders.cor, cop_dist_single)</span></code></pre></div>
<pre><code>## [1] 0.899822</code></pre>
<div class="sourceCode" id="cb299"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb299-1"><a href="数据探索性分析.html#cb299-1" tabindex="-1"></a><span class="fu">cor</span>(spiders.cor, cop_dist_complete)</span></code></pre></div>
<pre><code>## [1] 0.9405248</code></pre>
<p>当然，由于共表型矩阵来源于原始不相似度矩阵，因此我们无法测试共表型相关性的显著性。这两组距离数据并非相互独立。此外，共表型相关性不仅受数据影响，还强烈依赖于所采用的聚类方法。</p>
<p>用于比较聚类结果的另一可行统计指标是Gower（1983）距离，该距离是通过计算原始不相似度与共表型距离之间差异值的平方和得出的。能够产生最小Gower距离的聚类方法，可被视为针对不相似度矩阵提供了最优聚类模型。然而，值得注意的是，共表型相关性和Gower距离标准在判定最佳聚类结果时并不总是一致。</p>
<div class="sourceCode" id="cb301"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb301-1"><a href="数据探索性分析.html#cb301-1" tabindex="-1"></a><span class="fu">sum</span>((spiders.cor <span class="sc">-</span> cop_dist_single)<span class="sc">^</span><span class="dv">2</span>)</span></code></pre></div>
<pre><code>## [1] 573.2328</code></pre>
<div class="sourceCode" id="cb303"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb303-1"><a href="数据探索性分析.html#cb303-1" tabindex="-1"></a><span class="fu">sum</span>((spiders.cor <span class="sc">-</span> cop_dist_complete)<span class="sc">^</span><span class="dv">2</span>)</span></code></pre></div>
<pre><code>## [1] 287.5721</code></pre>
</div>
<div id="聚类稳健性评估" class="section level5 hasAnchor" number="6.3.1.5.2">
<h5><span class="header-section-number">6.3.1.5.2</span> 聚类稳健性评估<a href="数据探索性分析.html#聚类稳健性评估" class="anchor-section" aria-label="Anchor link to header"></a></h5>
<p>无约束聚类分析是一系列启发式方法，并非旨在检验先验假设。然而，自然变异会导致抽样变异性，分类结果可能会反映这一点。因此，评估分类的不确定性（或其相对应的稳健性）是合理的。</p>
<p>此类验证程序的优选方法是自助重抽样（例如，Efron 1979；Felsenstein 1985），它涉及随机抽取数据的子集并对这些子集进行聚类。在多次执行此操作后，统计在复制的聚类结果中出现给定聚类的比例。这个比例被称为聚类的自助概率（BP）。为了解决对经典自助程序的一些批评，人们开发了多尺度自助重抽样作为一种增强手段（Efron等人，1996；Shimodaira，2002，2004）。在这种方法中，使用几种不同大小的自助样本来估计每个聚类的p值。这一改进产生了“近似无偏”（AU）p值。</p>
<p>pvclust软件包（Suzuki和Shimodaira，2006）提供了函数，用于绘制与每个聚类相关的带有自助p值的树状图。近似无偏的p值以红色打印，较不准确的P值以绿色打印。具有高无偏值（例如0.95或更高）的聚类可被视为得到数据的强烈支持。让我们将此分析应用于使用Ward方法获得的树状图。请注意：在函数pvclust()中，必须根据我们通常的布局（行是变量）对数据对象进行转置。</p>
<div class="sourceCode" id="cb305"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb305-1"><a href="数据探索性分析.html#cb305-1" tabindex="-1"></a><span class="fu">library</span>(pvclust)</span>
<span id="cb305-2"><a href="数据探索性分析.html#cb305-2" tabindex="-1"></a>spiders.pv<span class="ot">=</span><span class="fu">pvclust</span>(<span class="fu">t</span>(spiders), <span class="at">method.hclust =</span> <span class="st">&quot;ward.D&quot;</span>, </span>
<span id="cb305-3"><a href="数据探索性分析.html#cb305-3" tabindex="-1"></a>                   <span class="at">method.dist =</span> <span class="st">&#39;euclidean&#39;</span>, <span class="at">quiet=</span><span class="cn">TRUE</span>)</span>
<span id="cb305-4"><a href="数据探索性分析.html#cb305-4" tabindex="-1"></a><span class="fu">plot</span>(spiders.pv)</span></code></pre></div>
<p><img src="_main_files/figure-html/unnamed-chunk-101-1.png" width="672" /></p>
</div>
<div id="群组数量" class="section level5 hasAnchor" number="6.3.1.5.3">
<h5><span class="header-section-number">6.3.1.5.3</span> 群组数量<a href="数据探索性分析.html#群组数量" class="anchor-section" aria-label="Anchor link to header"></a></h5>
<p>为了阐释和对比聚类结果，用户通常会寻找易于理解的聚类。这意味着需要确定一个切割点：应该在哪个位置切割树状图？虽然无需为整个树状图设定单一的切割层级（树状图的不同部分可能需要在不同精细度上进行解读），但找到一个或几个适合解读的层级往往颇具实用价值。这些层级可以通过直观检视树状图来主观划定，也可以基于某些特定标准来选择，例如事先设定的组群数量。不论采用何种方式，在树状图上附加信息或绘制聚类结果的额外图示都是非常有益的。</p>
<p>在选定树状图并评估其聚类稳健性之后，我们接下来探讨三种方法，它们将有助于我们确定合适的组群数量，分别是：轮廓宽度分析、矩阵比对，以及物种诊断法。</p>
<p>平均轮廓宽度</p>
<p>轮廓宽度是衡量一个对象归属于其所在聚类的程度指标。它通过比较该对象与其所在聚类内所有其他对象的平均不相似性，以及与该对象最接近的其他聚类中对象的平均不相似性来计算。轮廓宽度的取值范围在-1到1之间。</p>
<p>我们将使用cluster包中的silhouette()函数来计算轮廓宽度。该函数的文档提供了关于轮廓宽度的详细定义。简而言之，轮廓宽度的值越大，表明该对象的聚类效果越好。若轮廓宽度为负值，则可能意味着该对象被错误地划分到了当前聚类中。</p>
<p>在每个聚类融合的层级上，我们都可以计算平均轮廓宽度，以此作为衡量聚类质量的一个指标（即Rousseeuw质量指数）。具体来说，我们通过计算各个对象的轮廓宽度来评估它们与其所在聚类的紧密程度，并选择平均轮廓宽度最大的层级作为最优聚类结果，因为这意味着在该层级上，聚类内部的紧密性达到了最高。</p>
<div class="sourceCode" id="cb306"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb306-1"><a href="数据探索性分析.html#cb306-1" tabindex="-1"></a><span class="fu">library</span>(cluster)</span>
<span id="cb306-2"><a href="数据探索性分析.html#cb306-2" tabindex="-1"></a><span class="co"># Choose and rename the dendrogram (&quot;hclust&quot; object)</span></span>
<span id="cb306-3"><a href="数据探索性分析.html#cb306-3" tabindex="-1"></a>hc <span class="ot">&lt;-</span> spiders.ward</span>
<span id="cb306-4"><a href="数据探索性分析.html#cb306-4" tabindex="-1"></a></span>
<span id="cb306-5"><a href="数据探索性分析.html#cb306-5" tabindex="-1"></a><span class="co"># Plot average silhouette widths (using Ward clustering) for all </span></span>
<span id="cb306-6"><a href="数据探索性分析.html#cb306-6" tabindex="-1"></a><span class="co"># partitions except for the trivial partitions (k = 1 or k = n) </span></span>
<span id="cb306-7"><a href="数据探索性分析.html#cb306-7" tabindex="-1"></a>Si <span class="ot">&lt;-</span> <span class="fu">numeric</span>(<span class="fu">nrow</span>(spiders))</span>
<span id="cb306-8"><a href="数据探索性分析.html#cb306-8" tabindex="-1"></a><span class="cf">for</span> (k <span class="cf">in</span> <span class="dv">2</span><span class="sc">:</span>(<span class="fu">nrow</span>(spiders) <span class="sc">-</span> <span class="dv">1</span>)) { </span>
<span id="cb306-9"><a href="数据探索性分析.html#cb306-9" tabindex="-1"></a>  sil <span class="ot">&lt;-</span> <span class="fu">silhouette</span>(<span class="fu">cutree</span>(hc, <span class="at">k =</span> k), spiders.cor) </span>
<span id="cb306-10"><a href="数据探索性分析.html#cb306-10" tabindex="-1"></a>  Si[k] <span class="ot">&lt;-</span> <span class="fu">summary</span>(sil)<span class="sc">$</span>avg.width </span>
<span id="cb306-11"><a href="数据探索性分析.html#cb306-11" tabindex="-1"></a>}</span>
<span id="cb306-12"><a href="数据探索性分析.html#cb306-12" tabindex="-1"></a>k.best <span class="ot">&lt;-</span> <span class="fu">which.max</span>(Si) </span>
<span id="cb306-13"><a href="数据探索性分析.html#cb306-13" tabindex="-1"></a><span class="fu">plot</span>( <span class="dv">1</span><span class="sc">:</span><span class="fu">nrow</span>(spiders), Si, <span class="at">type =</span> <span class="st">&quot;h&quot;</span>, <span class="at">main =</span> <span class="st">&quot;Silhouette-optimal number of clusters&quot;</span>, <span class="at">xlab =</span> <span class="st">&quot;k (number of clusters)&quot;</span>, <span class="at">ylab =</span> <span class="st">&quot;Average silhouette width&quot;</span> ) </span>
<span id="cb306-14"><a href="数据探索性分析.html#cb306-14" tabindex="-1"></a><span class="fu">axis</span>( <span class="dv">1</span>, k.best, <span class="fu">paste</span>(<span class="st">&quot;optimum&quot;</span>, k.best, <span class="at">sep =</span> <span class="st">&quot;</span><span class="sc">\n</span><span class="st">&quot;</span>), <span class="at">col =</span> <span class="st">&quot;red&quot;</span>, <span class="at">font =</span> <span class="dv">2</span>, <span class="at">col.axis =</span> <span class="st">&quot;red&quot;</span> ) </span>
<span id="cb306-15"><a href="数据探索性分析.html#cb306-15" tabindex="-1"></a><span class="fu">points</span>(k.best, <span class="fu">max</span>(Si), <span class="at">pch =</span> <span class="dv">16</span>, <span class="at">col =</span> <span class="st">&quot;red&quot;</span>, <span class="at">cex =</span> <span class="fl">1.5</span>)</span></code></pre></div>
<p><img src="_main_files/figure-html/unnamed-chunk-102-1.png" width="672" /></p>
</div>
</div>
</div>
<div id="非层次聚类" class="section level3 hasAnchor" number="6.3.2">
<h3><span class="header-section-number">6.3.2</span> 非层次聚类<a href="数据探索性分析.html#非层次聚类" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>非层次聚类主要是寻找一种方式，将一组对象整齐地划分为若干个部分。具体来说，如果我们有p维空间中的n个对象，目标是要把它们分成k个组或聚类。这个划分的原则是，每个聚类内部的对象之间的相似度要高于它们与其他聚类中对象的相似度。这里，聚类的数量k是由用户自行确定的。</p>
<p>在进行该聚类分析时，算法需要有一个初始的设置，也就是初步确定每个对象分别属于哪一个聚类。这个初始设置会在后续的递归过程中逐步优化。虽然这个初始设置可以基于某些理论来确定，但在实际操作中，用户往往会选择随机的起始配置。为了找到最佳的划分方式，用户会多次运行这个分析过程，每次都使用不同的随机初始配置。</p>
<p>接下来，我们要介绍两种常用的非层次聚类方法：k均值聚类和围绕中心点聚类（Partitioning around mediods, PAM）。这两种方法都适用于欧几里得空间。但需要注意的是，如果数据表中的各个变量在维度上存在差异，那么在划分之前，我们需要先对这些变量进行标准化处理。否则，计算出的数据总方差会失去实际意义，因为它只是各个变量维度平方后的简单相加。</p>
<div id="k均值聚类" class="section level4 hasAnchor" number="6.3.2.1">
<h4><span class="header-section-number">6.3.2.1</span> k均值聚类<a href="数据探索性分析.html#k均值聚类" class="anchor-section" aria-label="Anchor link to header"></a></h4>
<p>k均值方法通过探究数据的局部结构来明确聚类：它主要是识别数据中的高密度区域，并据此来划分组群。为达成此目的，这一方法会进行迭代计算，以最小化一个名为“总误差平方和”（简称E2k、TESS或SSE）的目标函数。这个目标函数实质上是各组内数据点与组中心点距离平方和的总和。具体来说，我们会先计算每个组群内部各对象之间的（欧几里得）距离平方和，然后除以该组群内的对象数目，最后再将所有组群的这一结果加总。值得一提的是，这一标准与Ward的聚合聚类方法中所采用的标准是一致的。</p>
<p>如果我们事先已经确定了要划分的组群数量，推荐使用stats包中的kmeans()函数。这个函数能够通过设置nstart参数，利用不同的随机初始配置自动进行多次分析，以寻找最佳解决方案，即使得总误差平方和（SSE）最小的方案。</p>
<div class="sourceCode" id="cb307"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb307-1"><a href="数据探索性分析.html#cb307-1" tabindex="-1"></a>spiders.kmeans<span class="ot">=</span><span class="fu">kmeans</span>(spiders, <span class="at">centers =</span> <span class="dv">4</span>, <span class="at">nstart =</span> <span class="dv">100</span>)</span></code></pre></div>
<p>然而，需要注意的是，k均值算法是一种线性方法，并不适用于包含大量零值的原始物种丰度数据。为了解决这一问题，我们可以考虑两种策略。首先，我们可以使用非欧几里得相异度矩阵，例如Bray-Curtis百分比差异。在使用这类矩阵之前，我们需要先进行平方根变换，并进行主坐标分析（PCoA），以确保在欧几里得空间中完整表示所有对象。完成这些步骤后，我们再对PCoA的结果应用k均值算法进行划分。另一种策略是预先对物种数据进行转换。为了保持与前文的一致性，我们可以利用在之前章节中创建的弦变换或“标准化”物种数据。当这些数据与k均值算法中隐含的欧几里得距离结合时，分析将能够保留站点之间的弦距离。</p>
<p>当我们需要基于无法通过简单转换原始数据并计算欧几里得距离得到的不相似性指数（例如，百分比差异，也被称为Bray-Curtis不相似性）来进行k均值划分时，我们必须采取一种间接的方法。首先，我们需要对不相似性矩阵进行主坐标分析，从而生成一个包含n行的矩形数据表。这个数据表随后会被用作k均值划分的输入。特别地，在处理百分比差异不相似性时，我们还需要对其平方根进行PCoA，以确保获得完全符合欧几里得空间的解决方案。此外，也可以选择使用那些能够校正负特征值的PCoA函数。</p>
<p>上述聚类分析会生成一个包含预定数量组群的单一划分结果。如果我们想要探索不同k值下的多种划分方案，就需要重复进行分析。然而，这就引出了一个关键问题：如何确定哪种划分方案在组群数量方面是“最佳”的？为了回答这个问题，我们首先需要明确“最佳”的定义。存在多种评估标准，其中一些可以在cclust包的clustIndex()函数中找到。例如，Milligan和Cooper（1985）推荐最大化Calinski-Harabasz指数，该指数通过比较划分间的组间与组内平方和来评估划分的优劣。值得注意的是，对于大小不均的划分，该指数的值可能会偏低。另一个有用的指标是“简单结构指数”（ssi），其最大值在最小二乘法的框架下可以指示出最佳划分。关于这些指标的更多详情，请查阅clustIndex()函数的文档。</p>
<p>幸运的是，我们不必手动多次执行kmeans()函数来尝试不同的k值。vegan包中的cascadeKM()函数为kmeans()函数提供了一个便捷的封装，它在原有功能的基础上添加了新的特性。具体来说，cascadeKM()函数能够自动生成一系列从小（由inf.gr参数指定）到大（由sup.gr参数指定）的k值对应的划分，形成一个级联结构，从而大大简化了我们的分析工作。</p>
<div class="sourceCode" id="cb308"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb308-1"><a href="数据探索性分析.html#cb308-1" tabindex="-1"></a><span class="co">#有关cascadeKM的例子</span></span>
<span id="cb308-2"><a href="数据探索性分析.html#cb308-2" tabindex="-1"></a>spider.km.cascade <span class="ot">=</span> <span class="fu">cascadeKM</span>(spiders, <span class="at">inf.gr =</span> <span class="dv">2</span>, <span class="at">sup.gr =</span> <span class="dv">10</span>,</span>
<span id="cb308-3"><a href="数据探索性分析.html#cb308-3" tabindex="-1"></a>                              <span class="at">iter =</span> <span class="dv">100</span>, <span class="at">criterion =</span> <span class="st">&quot;ssi&quot;</span>)</span>
<span id="cb308-4"><a href="数据探索性分析.html#cb308-4" tabindex="-1"></a><span class="fu">plot</span>(spider.km.cascade)</span></code></pre></div>
<p><img src="_main_files/figure-html/unnamed-chunk-104-1.png" width="672" /></p>
</div>
<div id="围绕中心点的距离" class="section level4 hasAnchor" number="6.3.2.2">
<h4><span class="header-section-number">6.3.2.2</span> 围绕中心点的距离<a href="数据探索性分析.html#围绕中心点的距离" class="anchor-section" aria-label="Anchor link to header"></a></h4>
<p>围绕中心点的划分方法旨在从数据集的观测值中找出k个具有代表性的对象或中心点，这些对象应能够充分反映数据的整体结构。确定这k个中心点后，我们将每个观测值归入距离其最近的中心点，从而形成k个簇。此方法的最终目标是找到那些能使观测值到其最近代表对象的差异总和最小的k个代表对象。相较之下，k均值算法则致力于使组内欧几里得距离的平方和达到最小，因此它属于传统的最小二乘法范畴，而围绕中心点的划分并不属于这一类别。</p>
<p>在R语言环境中，pam()函数（属于cluster包）更为灵活，它既可以处理原始数据，也能处理不相似性矩阵，这相较于kmeans()函数，为用户提供了更广泛的关联度量选择。此外，pam()还允许我们利用轮廓系数来确定最优的组群数量。</p>
<div class="sourceCode" id="cb309"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb309-1"><a href="数据探索性分析.html#cb309-1" tabindex="-1"></a>asw <span class="ot">&lt;-</span> <span class="fu">numeric</span>(<span class="fu">nrow</span>(spiders)) </span>
<span id="cb309-2"><a href="数据探索性分析.html#cb309-2" tabindex="-1"></a><span class="cf">for</span> (k <span class="cf">in</span> <span class="dv">2</span><span class="sc">:</span>(<span class="fu">nrow</span>(spiders) <span class="sc">-</span> <span class="dv">1</span>)) </span>
<span id="cb309-3"><a href="数据探索性分析.html#cb309-3" tabindex="-1"></a>  asw[k] <span class="ot">&lt;-</span> <span class="fu">pam</span>(spiders.cor, k, <span class="at">diss =</span> <span class="cn">TRUE</span>)<span class="sc">$</span>silinfo<span class="sc">$</span>avg.width</span>
<span id="cb309-4"><a href="数据探索性分析.html#cb309-4" tabindex="-1"></a>k.best <span class="ot">&lt;-</span> <span class="fu">which.max</span>(asw) </span>
<span id="cb309-5"><a href="数据探索性分析.html#cb309-5" tabindex="-1"></a><span class="fu">plot</span>( <span class="dv">1</span><span class="sc">:</span><span class="fu">nrow</span>(spiders), asw, <span class="at">type =</span> <span class="st">&quot;h&quot;</span>, <span class="at">main =</span> <span class="st">&quot;Choice of the number of clusters&quot;</span>,<span class="at">xlab =</span> <span class="st">&quot;k (number of clusters)&quot;</span>,<span class="at">ylab =</span> <span class="st">&quot;Average silhouette width&quot;</span> )</span>
<span id="cb309-6"><a href="数据探索性分析.html#cb309-6" tabindex="-1"></a><span class="fu">axis</span>( <span class="dv">1</span>, k.best, <span class="fu">paste</span>(<span class="st">&quot;optimum&quot;</span>, k.best, <span class="at">sep =</span> <span class="st">&quot;</span><span class="sc">\n</span><span class="st">&quot;</span>), <span class="at">col =</span> <span class="st">&quot;red&quot;</span>, <span class="at">font =</span> <span class="dv">2</span>, <span class="at">col.axis =</span> <span class="st">&quot;red&quot;</span> ) </span>
<span id="cb309-7"><a href="数据探索性分析.html#cb309-7" tabindex="-1"></a><span class="fu">points</span>(k.best, <span class="fu">max</span>(asw), <span class="at">pch =</span> <span class="dv">16</span>, <span class="at">col =</span> <span class="st">&quot;red&quot;</span>, <span class="at">cex =</span> <span class="fl">1.5</span>)</span></code></pre></div>
<p><img src="_main_files/figure-html/unnamed-chunk-105-1.png" width="672" /></p>
</div>
</div>
<div id="多元回归树" class="section level3 hasAnchor" number="6.3.3">
<h3><span class="header-section-number">6.3.3</span> 多元回归树<a href="数据探索性分析.html#多元回归树" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>上述的所有聚类分析方法都可以归为非监督的聚类分析，即聚类仅依赖于某一套数据本身的相关性。而多元回归树（Multivariate reegression trees, MRT），它允许我们在一组定量或分类解释变量的指导下，对某个定量响应变量进行递归式的划分。这种处理手法有时也被称为约束聚类或监督式聚类。通过这种方式，我们得到的是一棵树状结构，其“叶节点”（即终端的站点群组）由特定的站点子集所构成，这些子集的选择旨在最小化组内的平方和（类似于k均值聚类中的操作），但值得注意的是，每一个连续的划分都是由某个解释变量的阈值或状态来定义的。在面对众多可能的群组构成和叶节点数量时，我们通常会选择那个预测能力最强的方案。这一点揭示了一个重要事实：与大多数基于解释能力来选择解释变量的约束排序方法不同，MRT更侧重于预测功能，这使得它在如环境管理等实际应用场景中成为了一个极具价值的工具。MRT不仅功能强大，而且稳健可靠，它能够应对多种复杂情况，包括数据缺失、响应变量与解释变量之间存在非线性关系，以及解释变量间存在高阶交互作用的场景。</p>
<div id="基本流程" class="section level4 hasAnchor" number="6.3.3.1">
<h4><span class="header-section-number">6.3.3.1</span> 基本流程<a href="数据探索性分析.html#基本流程" class="anchor-section" aria-label="Anchor link to header"></a></h4>
<p>多元回归树（MRT）的构建涉及两个核心步骤：首先是对数据进行约束性划分，其次是对这些划分结果进行交叉验证。下面，我们将先概述这两个步骤，然后探讨如何将它们结合起来，以生成一个有效的决策树模型。</p>
<div id="数据的约束性划分" class="section level5 hasAnchor" number="6.3.3.1.1">
<h5><span class="header-section-number">6.3.3.1.1</span> 数据的约束性划分<a href="数据探索性分析.html#数据的约束性划分" class="anchor-section" aria-label="Anchor link to header"></a></h5>
<p>在这一步中，我们需要针对每个解释变量，尝试所有可能的方式将数据站点划分为两组。对于数值型变量，我们根据变量的值对数据站点进行排序，然后依次在每个站点之后进行分割，形成不同的分组。而对于分类变量，我们则尝试所有可能的类别组合来进行分组。在每种划分情况下，我们都会计算响应数据的组内平方和（即各数据点到其所在组均值的距离的平方和，简称组内SS）。我们的目标是找到那个能够使得组内SS最小的划分方式，并记录下对应的解释变量及其阈值。</p>
<p>接下来，我们会在上一步得到的每个子组内重复上述过程，继续寻找最佳的划分方式和对应的解释变量。这个过程会一直进行下去，直到每个数据点都单独成为一个组，或者达到我们预设的每个组的最小数据点数目。此时，我们会根据研究的具体目标，选择一个合适大小的树（即组数）。对于以预测为目标的研究来说，我们还需要通过交叉验证来进一步确定最佳的预测树。</p>
<p>值得注意的是，除了树的叶子节点数量和组成之外，树的相对误差（RE）也是一个重要的评价指标。RE定义为所有叶子节点的组内SS之和除以整个数据集的SS，它反映了树模型未能解释的方差部分。虽然在没有交叉验证的情况下，我们可能会倾向于选择使得RE最小的树（这等价于选择使得R²最大的树），但这样做往往更侧重于解释性而非预测性。实际上，有研究表明，RE往往会高估树模型在新数据上的预测准确性，而交叉验证的相对误差（CVRE）则能提供更准确的预测性能评估。</p>
</div>
<div id="划分的交叉验证与树的剪枝" class="section level5 hasAnchor" number="6.3.3.1.2">
<h5><span class="header-section-number">6.3.3.1.2</span> 划分的交叉验证与树的剪枝<a href="数据探索性分析.html#划分的交叉验证与树的剪枝" class="anchor-section" aria-label="Anchor link to header"></a></h5>
<p>那么，我们应该在树的哪个层级进行剪枝操作呢？也就是说，我们应该在哪个位置切断树的分支，以保留最具预测意义的划分呢？为了回答这个问题，我们可以采用一种预测导向的方法：首先使用一部分数据（训练集）来构建树模型，然后使用剩余的数据（测试集）来验证模型的预测性能。具体来说，我们可以将测试集中的数据点分配到已经构建好的树模型中，然后根据它们的预测结果来评估模型的性能。通过这种方式，我们能够找到那个在未见过的数据上表现最佳的树模型，从而确定最佳的剪枝位置。这种方法不仅能够帮助我们防止模型过拟合训练数据，还能够确保模型在新的、未见过的数据上具有良好的预测能力。因此，交叉验证是机器学习中常用的一种技术，用于评估模型的泛化能力并选择最佳的模型参数。</p>
</div>
</div>
</div>
<div id="顺序聚类" class="section level3 hasAnchor" number="6.3.4">
<h3><span class="header-section-number">6.3.4</span> 顺序聚类<a href="数据探索性分析.html#顺序聚类" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>当数据以空间（如样带）或时间序列的形式呈现时，我们在沿着这一序列寻找数据组和间断点时，可以纳入连续性信息的考量。在时间和空间背景下，已有多种方法被提出以达成这一目的。例如，在时间背景下，Gordon和Birks于1972年和1974年，Gordon于1973年，以及Legendre等人于1985年分别提出了相关方法；而在空间背景下，Legendre等人于1990年也提出了相应的方法。此外，我们还可以利用多元回归树（MRT）来计算序列聚类，此时，采样序列由一个变量来表示，并作为计算的约束条件。</p>
</div>
</div>
<div id="作业-1" class="section level2 hasAnchor" number="6.4">
<h2><span class="header-section-number">6.4</span> 作业<a href="数据探索性分析.html#作业-1" class="anchor-section" aria-label="Anchor link to header"></a></h2>
<ol style="list-style-type: decimal">
<li><p>检验生态岛植物调查数据中，胸径是否符合正态分布，如果不是，请尝试转化为正态分布。</p></li>
<li><p>请对生态岛上的调查样方，依据其物种组成的差异进行排序，并在合适的低维空间展示。同时对这些样方进行聚类，并将聚类与排序结果用一张图展示。</p></li>
</ol>

</div>
</div>
            </section>

          </div>
        </div>
      </div>
<a href="数理统计基础.html" class="navigation navigation-prev " aria-label="Previous page"><i class="fa fa-angle-left"></i></a>
<a href="实验设计.html" class="navigation navigation-next " aria-label="Next page"><i class="fa fa-angle-right"></i></a>
    </div>
  </div>
<script src="libs/gitbook-2.6.7/js/app.min.js"></script>
<script src="libs/gitbook-2.6.7/js/clipboard.min.js"></script>
<script src="libs/gitbook-2.6.7/js/plugin-search.js"></script>
<script src="libs/gitbook-2.6.7/js/plugin-sharing.js"></script>
<script src="libs/gitbook-2.6.7/js/plugin-fontsettings.js"></script>
<script src="libs/gitbook-2.6.7/js/plugin-bookdown.js"></script>
<script src="libs/gitbook-2.6.7/js/jquery.highlight.js"></script>
<script src="libs/gitbook-2.6.7/js/plugin-clipboard.js"></script>
<script>
gitbook.require(["gitbook"], function(gitbook) {
gitbook.start({
"sharing": {
"github": false,
"facebook": true,
"twitter": true,
"linkedin": false,
"weibo": false,
"instapaper": false,
"vk": false,
"whatsapp": false,
"all": ["facebook", "twitter", "linkedin", "weibo", "instapaper"]
},
"fontsettings": {
"theme": "white",
"family": "sans",
"size": 2
},
"edit": {
"link": "https://github.com/USERNAME/REPO/edit/BRANCH/05-exploratory_data_analysis.Rmd",
"text": "编辑"
},
"history": {
"link": null,
"text": null
},
"view": {
"link": null,
"text": null
},
"download": ["_main.epub"],
"search": {
"engine": "fuse",
"options": null
},
"toc": {
"collapse": "subsection"
}
});
});
</script>

<!-- dynamically load mathjax for compatibility with self-contained -->
<script>
  (function () {
    var script = document.createElement("script");
    script.type = "text/javascript";
    var src = "true";
    if (src === "" || src === "true") src = "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/latest.js?config=TeX-MML-AM_CHTML";
    if (location.protocol !== "file:")
      if (/^https?:/.test(src))
        src = src.replace(/^https?:/, '');
    script.src = src;
    document.getElementsByTagName("head")[0].appendChild(script);
  })();
</script>
</body>

</html>
